История изменений
Исправление EXL, (текущая версия) :
на опыт других программистов.
По опыту знаю, что enum
в некоторых случаях на embedded нужно было внимательно использовать.
На обычных системах всегда привычно что enum
-значения это 4 байта и обычный int
, а на embedded в целях экономии на спичках компилятору говорят чтобы он для enum
-значений использовал 2 байта. Внимание, код SDK драйвера ATI Imageon GPU именитой корпорации ATI/AMD:
typedef enum _AhiRotation_t {
AhiRotateNone = 0,
AhiRotate90,
AhiRotate180,
AhiRotate270,
AhiRotateNum,
AhiRotateMax = 0x7FFFFFFF
} AhiRotation_t;
Соответственно вот эта вот дрянь 0x7FFFFFFF
это грязный хак для компилятора, чтобы он enum
этот 4-байтным сделал при флагах типа -fshort-enums
в GCC, а в ADS каком-нибудь оно вроде и так 2 байта из коробки.
При реверсе драйвера я однажды забыл про этот 0x7FFFFFFF
и по итогу структуры были неправильного размера и флаг оказывался чёрти-где, ничего не работало. А на отладку и выявление этой особенности ушло много времени.
Исходная версия EXL, :
на опыт других программистов.
По опыту знаю, что enum
в некоторых случаях на embedded нужно было внимательно использовать.
На обычных системах всегда привычно что enum
-значения это 4 байта и обычный int
, а на embedded в целях экономии на спичках компилятору говорят чтобы он для enum
-значений использовал 2 байта. Внимание, код SDK драйвера ATI Imageon GPU именитой корпорации ATI/AMD:
typedef enum _AhiRotation_t {
AhiRotateNone = 0,
AhiRotate90,
AhiRotate180,
AhiRotate270,
AhiRotateNum,
AhiRotateMax = 0x7FFFFFFF
} AhiRotation_t;
Соответственно вот эта вот дрянь 0x7FFFFFFF
это грязный хак для компилятора, чтобы он enum
этот 4-байтным сделал при флагах типа -fshort-enums
в GCC, а в ADS каком-нибудь оно вроде и так 2 байта из коробки.
При реверсе драйвера я однажды забыл про этот 0x7FFFFFFF
и по итогу структуры были неправильно размера и флаг оказывался чёрти-где, ничего не работало. А на отладку и выявление этой особенности ушло много времени.