Цитата(Vitёk @ Mar 6 2008, 12:42)

Код
// описание структуры
struct TStored
{
....
volatile unsigned short var_1;
....
};
// экземпляр
struct TStored strd;
// ....
strd.var_1 = 0x1234;
И есть процедура обработки прерывания, написанная на АСМе (файл типа *.s), откуда необходимо получить доступ к полю
var_1 структуры
strd.
Надо знать все sizeof на целевой платформе, так и правила выравниания. Вобщем чаще -- это фантастика. Разве что НА C где-то предварительно посчитать что-то вроде (uintptr_t)&(((struct s*)0)->v) и передать каким-то образом в ассемблер.
Цитата(Vitёk @ Mar 7 2008, 12:36)

Компилятор у меня WinAVR (указано в комментарии к названию темы).
Компилятор у тебю -- GCC. Афтар не в теме.
Цитата(Vitёk @ Mar 7 2008, 11:41)

Есть только один момент: при внесении изменений в структуру (а такое иногда бывает), приходится заново вычислять смещение для некоторых её полей (вручную), и менять соотв. дефайны. При создании темы у меня была надежда, что описание структуры (в .h-файле) можно скормить компилятору, что бы он сам проделывал эту работу. Сбыться ей, судя по всему, не судьба.
Ну для тех у кого WinAVR -- не судьба. А так вообще любой вменяемый компилятор (из всех перевиданных мною) заставить при желании вполне возможно. Я выше -- написал как. Вначале генерируется *.inc для ассемблера на основе выше приведённых конструкций с приведением NULL к типу структуры. Потом ассемблируется с полученным *.inc. Написать Makefile соответствующий не сложно.
Цитата
У меня были проблемы с порядком размещения полей в структуре, от которых удалось избавиться при помощи #pragma pack.
Вместо которых в GCC атрибуты...
Сообщение отредактировал Kirill Frolov - Mar 7 2008, 11:37