16+
Воскресенье
22 июля
Вход |Карта сайта | |Upload |codebook | PARTS

 О смысле всего сущего 0xFF

 Средства и методы разработки

 Мобильная и беспроводная связь

 Блошиный рынок Объявления

caxapa

Микроконтроллеры ARM 

AVR PIC MSP PLD,FPGA,DSP 

Кибернетика Технологии 

Схемы, платы, компоненты 

Микроконтроллеры

 
   Новая тема Правила Регистрация Поиск »» Архив
Вернуться в конференциюТопик полностью
sladkoejka  (30.06.2018 02:47 - 30.06.2018 14:42) , в ответ на 1. автор: a55ku
пробовал даже так: 
int sizeofInt = sizeof(int);
printf("sizeof(int) = %i\r\n", sizeofInt);
и так:
printf("sizeof(int) = %i\r\n", 1234);
результат одинаковый, значение не выводится, портится текст. 2. stdint.h в IAR 8051 10.10 почему-то нету, есть только stdbool.h Добавлено: Любопытно, что такой вариант работает нормально:
printf("sizeof(int) = %d\r\n", sizeof(int));
результат:
sizeof(int) = 2
Установил последнюю версию IAR 8051 10.20. Те-же грабли. Попытался скомпилировать пример мигания светодиодом по таймеру - на IAR не работает. А SDCC мигает. После долгого анализа и сравнения кода, удалось запустить пример и на IAR. Как оказалось, SDCC вставляет код с адреса 6A. А IAR прямо в таблицу прерываний. После добавления пустого обработчика последнего прерывания в таблице (вектор 0x0063), IAR стал размещать код после таблицы векторов прерываний и код заработал. Любопытно, что в IAR код работает, как и предполагалось - мигает с частотой 1 сек. А вот код SDCC почему-то мигает часто, раза в 4-8 быстрей... Может ктото подскажет как заставить IAR не размещать код в таблице прерываний без определения пустого обработчика? Вот собственно пример blink.c:
#include <stdbool.h>

//------------------------------------------------------------------------------
#ifdef __IAR_SYSTEMS_ICC__
__sfr __no_init volatile unsigned char  IOA     @0x80;
__sfr __no_init volatile unsigned char  OEA     @0xb2;
__sfr __no_init volatile unsigned char  TCON    @0x88;
__sfr __no_init volatile unsigned char  TMOD    @0x89;
__sfr __no_init volatile unsigned char  TL0     @0x8a;
__sfr __no_init volatile unsigned char  TH0     @0x8c;
__sfr __no_init volatile unsigned char  CKCON   @0x8e;
__sfr __no_init volatile unsigned char  IE      @0xa8;
#else // SDCC
__sfr __at(0x80) IOA;
__sfr __at(0xb2) OEA;
__sfr __at(0x88) TCON;
__sfr __at(0x89) TMOD;
__sfr __at(0x8a) TL0;
__sfr __at(0x8c) TH0;
__sfr __at(0x8e) CKCON;
__sfr __at(0xa8) IE;
#endif

#define TF0_int     0x0B
#define TCON_TR0    0x10
//------------------------------------------------------------------------------

#ifdef __IAR_SYSTEMS_ICC__
// Без этого обработчика IAR размещает код в таблице векторов прерываний и код почему-то не работает
#pragma vector=0x0063
__interrupt __root void IntHandler_INT6pin(void)
{
}
#endif

volatile unsigned int _tickCounter;


#ifdef __IAR_SYSTEMS_ICC__
#pragma vector=TF0_int
__interrupt __root void IntHandler_Timer0(void)
#else
void IntHandler_Timer0(void) __interrupt(1)
#endif
{
	TH0 = (65536 - 1000) / 256;
	TL0 = (65536 - 1000) % 256;
	_tickCounter++;
	if (_tickCounter >= 1000)
	{
		_tickCounter = 0;
		IOA ^= 0x03;	
	}
}


void main(void)
{
    _tickCounter = 0;

    // Configure timer 1000 ticks per second
    TMOD = 0x01;
    CKCON = 0x00;
    TH0 = (65536 - 1000) / 256;
    TL0 = (65536 - 1000) % 256;
    
    IE |= 0x82;
    TCON |= TCON_TR0; // Start timer

    OEA=0x03; // port A as output
    IOA=0x01;

    for(;;);
}
 [x][x][x][x][x][x] [x][x][x][x][x][x][x][x]

Тема выделяется по переводу строки или автоматом

 

Имя


Регистрация позволит вам редактировать и перемещать ваши сообщения и прикреплять к ним файлы.
 
Символы: á é ó ú ý « »
Главная | Карта сайта | О проекте | Проекты | Файлообменник | Регистрация | Вебмастер | RSS
Лето 7526 от сотворения мира. При использовании материалов сайта ссылка на caxapу обязательна.
MMI © MMXVIII