|
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