Цитата(MrYuran @ Oct 18 2012, 12:25)

Я не знаю, что надо сделать, но точно знаю теперь, чего не надо..
Не надо использовать такие структуры без принудительной упаковки, во избежание.
Мне совершенно было не смешно, когда port1.out.pin3 = 1 махал битами в регистре dir вместо out (а это ещё надо было найти)
Скорее всего был локальный глюк какой-то конкретной версии mspgcc. Хотя принудительная упаковка - дело несложное, можно и её добавить, для пущей уверенности.
Цитата(Палыч @ Oct 18 2012, 12:55)

Вставить #pragma pack(n) или указать транслятору -fpack-struct=n cо значением n отличным от 1.
К сожалению, в документации на gcc нигде нет упоминания: какое значение n (величина выравнивания) принято "по-умолчанию"...
Нет, ничего из этого не увеличивает размер структуры. Проверил и с #pragma pack(x), и с -fpack-struct=x (x={4,8,16,32}), и с ними обоими одновременно.
До кучи проверил __attribute__ ((packed)) и __attribute__ ((aligned (x))) для типа.
Размер структуры равен 2, как я не извращался

Единственный вариант, который изменил размер, был вот такой:
Код
typedef struct
{
unsigned char a __attribute__ ((aligned (8)));
unsigned char b __attribute__ ((aligned (8)));
}str;
Но этот вариант не страшен, потому что явно указывать alignment там, где он не нужен, мы не будем.
Цитата(_Pasha @ Oct 18 2012, 13:44)

Дык я это "не то не к тому" унаследовал, пытаясь сказать, что сабжевое приведение - лишняя суета и потенциальный источник проблем.
А, вон оно что! Теперь понял