Вопросик по Си(IAR228).
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено Sl 14 января 2004 г. 12:57

Подскажите, пожалуйста, как мне об'яснить транслятору, что
константа CLong_Tmax содержит больше двух байт.
По идее увидев что константа предназначена для unsigned long
транслятор должен вычислять ее в полную(четыре байта) длину.
А на самом деле он вычисляет ее как целую - т.е. старшие два байта
обнуляет.
Правильно получается только в последнем варианте.


static unsigned long int LITT;

#define CP_Tmax 800
#define CIMulPWP 256

-----------------------------------------------
#define CLong_Tmax (CP_Tmax*CIMulPWP)

LITT = CLong_Tmax;

В результате LITT = 0x00.00.20.00 а надо 0x00.03.20.00

-----------------------------------------------
#define CLong_Tmax (0x00000320*0x00000100)
LITT = CLong_Tmax;

В результате LITT = 0x00.00.20.00 а надо 0x00.03.20.00
-----------------------------------------------
#define CLong_Tmax (0x00000320<<8)
LITT = CLong_Tmax;

В результате LITT = 0x00.00.20.00 а надо 0x00.03.20.00
-----------------------------------------------
#define CLong_Tmax (0x00032000) // only that is right for LONG
LITT = CLong_Tmax;

В результате LITT = 0x00.03.20.00 ПРАВИЛЬНО
-----------------------------------------------