Транслятор IAR 228 не правильно пишет константу в тип unsigned long int.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Sl 25 февраля 2004 г. 13:56

Help please.Или я что то не понимаю в Cи или транслятор меня не понимает.

Транслятор при этом не выдает ни ошибки, ни предупреждения.
Таких проблем с int нет.

=============================
Проблема:
Задаю глобальную переменную:
static unsigned long int LITPWM;

Задаю константу(сразу после описания переменной):
#define CLongPWM_Tmax (CPWM_Tmax*CIMulPWP)
#define CLongPWM_Tmax (0x00000320*0x00000100)
#define CLongPWM_Tmax (0x00000320<<8)
#define CLongPWM_Tmax (CPWM_Tmin*CIMulPWP)

LITPWM = CLongPWM_Tmax; // error write const in LITPWM.
В результате в переменную записываются только два младших байта.

3116 IsTPWM = CPWM_Tmax;
\ 0000005A EF08 LDI R16,248
\ 0000005C E012 LDI R17,2
\ 0000005E .... LDI R30,LOW(IsTPWM)
\ 00000060 .... LDI R31,(IsTPWM) >> 8
\ 00000062 8300 ST Z,R16
\ 00000064 8311 STD Z+1,R17

=============================
Решение проблемы:

Если константу задаю “в лоб” – без предварительных вычислений в препроцессоре – норма.

#define CLongPWM_Tmax (0x00032000) // only that is right for LONG

=============================
Не нравится мне такое решение проблемы!


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru