Доброго времени суток!
Предположим, что у нас есть упакованная структура данных:
struct Foo {
uint8_t v1;
uint16_t v2;
} __attribute__((packed));
Foo foo;
Поле foo.v2 расположено по невыровненному адресу и при работе с данным полем компилятор автоматически выполняет побайтовое копирование (и это правильно).
Теперь попробуем взять указатель на данное поле:
uint16_t *vPtr = &foo.v2;
Компилятор выдаст предупреждение: warning: taking address of packed member of 'Foo' may
Может. По крайней мере у IAR:
In section .text, align 4, keep-with-next
__noreturn __task void main()
{
main: (+1)
0xB082 SUB SP,SP,#+8
#pragma section = ".intvec"
#pragma section