QUOTE (a9d @ Sep 9 2013, 04:58)

Я вижу, что IAR под uint8_t выделяет два байта.
Неверно. Под uint8_t выделяется один байт, а вот следом за ним вставляется пустое место для выравнивания следующего поля (uint16_t) на границу 2 байт.
QUOTE (a9d @ Sep 9 2013, 05:46)

Сработало.
Ага. Здесь сработало, но при этом заодно упаковались и все объявленные следом структуры, а значит доступ к их членам стал байтовым и как следствие медленным, с увеличением размера кода.
Надо было разбираться, почему не работет ваш макрос PACKED_STRUCT. Но не видя его определения советовать тут что-то очень трудно.