Да, насчет упаковки просто байтового массива я был неправ - в любом случае располагается
по двум младшим байтам.
Попадание в __AddressError будет, скажем, вот на таком примере (вместо rs232_tx
подставить нужную функцию по вкусу) :
Код
typedef struct
{
uint a __attribute__ ((packed));
uchar b[3] __attribute__ ((packed));
uint c[4] __attribute__ ((packed));
} example_struct_t;
const example_struct_t exStruct = { 1, {2, 3, 4}, {6, 7, 8, 9} };
const uint * cPtr;
cPtr = exStruct.c;
for ( uint i= 0; i< 4; i++)
{
rs232_tx_hex_uint( *cPtr++);
}
//
14579 .section .const,psv
14580 .align 2
14581 _exStruct.3984:
14582 0000 01 00 .word 1
14583 0002 02 .byte 2
14584 0003 03 .byte 3
14585 0004 04 .byte 4
14586 0005 06 00 .word 6
14587 0007 07 00 .word 7
14588 0009 08 00 .word 8
14589 000b 09 00 .word 9
//
14638 000008 58 00 20 mov #_exStruct.3984+5,w8
14639 00000a D9 00 20 mov #_exStruct.3984+13,w9
14640 .L2:
14660 00000c 38 00 78 mov [w8++],w0
14661 00000e 00 00 07 rcall ___rs232_tx_hex_uint
14663 000010 89 0F 54 sub w8,w9,[w15]
14664 .set ___BP___,75
14665 000012 00 00 3A bra nz,.L2
Сообщение отредактировал Diz - Feb 15 2008, 10:42