Проблема размещения массивов. Есть такой текст в IAR, работает:
typedef struct FONT_DEF { unsigned char *au8FontTable; /* Font table start address in memory */ } FONT_DEF;
__flash unsigned char Font_1[] = { 7, 8, 0, 255 0x00,0x00,0x00,0x00,0x00,0x00,0x00, …………………………………………….. 0x98,0x64,0x24,0x24,0xFC,0x00,0x00 };
__flash unsigned char Font_2[] = { 5, 6, 32, 59 0x00,0x00,0x00,0x00,0x00, ……………………………………… 0x24,0x1A,0x0A,0x3E,0x00 };
struct const FONT_DEF Font_TAB[] = { { Font_1 }, { Font_2 } };
Перевожу его в WinAVR, получается так:
typedef struct FONT_DEF { unsigned char *au8FontTable; /* Font table start address in memory */ } FONT_DEF;
unsigned char Font_1[] __attribute__((__progmem__)) = { 7, 8, 0, 255 0x00,0x00,0x00,0x00,0x00,0x00,0x00, …………………………………………….. 0x98,0x64,0x24,0x24,0xFC,0x00,0x00 };
unsigned char Font_2[] __attribute__((__progmem__)) = { 5, 6, 32, 59 0x00,0x00,0x00,0x00,0x00, ……………………………………… 0x24,0x1A,0x0A,0x3E,0x00 };
struct FONT_DEF Font_TAB[] = { { Font_1 }, { Font_2 } };
Компилится, но не работает. В отладчики видно, что адреса рассчитываются не правильно. Реальный адрес массива Font_1 в progmem 0x2A, а в структуре Font_TAB он 0x54. Откуда такое смещение? Может я не правильно атрибуты задаю? Помогите разобраться.
|