Цитата(Diz @ Feb 15 2008, 00:34)

Плюс есть некоторые тонкости с упаковкой структур (аттрибут packed).
Например, если идет байтовый массив, то каждые два байта упаковываются в слово и
занимают 2 байта команды(третий - пустой). При обращении к такому массиву через
указатель иногда получается чтение по нечетному адресу - и выпадение в Address_Error.
На самоме деле packed для байтовых массивов не нужен, элементы массива и без модификатора размещаются по два в слове. packed нужен для размешения элементов структуры размером больше байта по невыровненному адресу. Тем не менее, компилятор все нормально отрабатывает, не знаю, какие у вас проблемы:
Код
1:
2: typedef struct __foo
3: {
4: char a;
5: int x[2] __attribute__ ((packed));
6: } foo;
7:
8: volatile foo doo;
9:
10: int main(void)
11: {
12: volatile int *p;
13:
14: p = &doo.x[0];
15:
16: *p = 0x1245;
00280 BFC801 mov.b 0x0801,0x0000
00282 B3C450 mov.b #0x45,0x0000
00284 B7E801 mov.b 0x0000,0x0801
00286 BFC802 mov.b 0x0802,0x0000
00288 B3C120 mov.b #0x12,0x0000
0028A B7E802 mov.b 0x0000,0x0802
0028C 37FFFF bra 0x00028c
Код
External Symbols in Data Memory (by address):
0x0800 _doo
понятное дело, что оверхеда будет немеряно, потому как байтовые инструкции используются (mov.b, ze.

, но проблем с кодом не будет
Цитата(YAM @ Feb 15 2008, 11:06)

Понятно, спасибо...
Судя по всему IAR вообще не заморачивается с упаковкой...
IAR dsPIC последний (1.30) структуры паковать не умеет...