Добрый день! у меня такая проблемка образовалась, при разных уровнях оптимизации работают по разному сложения Name = (Typ_t __farflash*)( TablModVal|0x010000L); замена | на + результата не приносит.
все данные арсположены выше 0х10000 есть хеадер с дефаном #define data 0x3333 #define data2 0x4444
сам макрос использование //GETTABLE_PTR(адрес расположения ссылки на таблицу,имя типедеф стректуры,Name)
#define GETTABLE_PTR(TablMod,Typ_t,Name) Typ_t __farflash *Name;\ Addr16_t TablModVal;\ TablModVal = * (Addr16_t __farflash*)(TablMod|0x10000L);\ Name = (Typ_t __farflash*)( TablModVal|0x010000L); <---вот тут складывает не верно вернее берет только 16бит
в результате последняя операция |0x010000L вовсе игнорируется и копируются 16 бит данных в результате старший байт абреса становится любым. это раньше работало но вот в одном месте наткнулся на вот такой глюк. если поменять оптимизацию то |0x010000L выполняется. как данное можно сделать чтоб не зависило от уровня оптимизации, код не поместится
|