Дефайна offsetof в WinAVR-е вообще нет, наверное его забыли. Но это не суть, впринцыпе я написал его-же.
Все хорошо, все правильно, но компилятор ругается, притом через раз. Вот пример:
Код
.....
LDD(StatusO, Bus, offsetof(TMultiBus, StatusO)); //StatusO = Bus->StatusO;
CPI(StatusO, soNone); //if (StatusO != soNone)
BREQ(TMultiBusRECV_NoColise); //{
LDD(Echo, Bus, offsetof(TMultiBus, Echo)); // Echo = Bus->Echo;
CPSE(Echo, Byte); // if (Echo != Byte)
LDI(StatusO, soNone); // StatusO = soNone;
LDD(Echo, Bus, offsetof(TMultiBus, NextEcho)); // Echo = Bus->NextEcho;
STD(Bus, Echo, offsetof(TMultiBus, Echo)); // Bus->Echo = Echo;
LABEL(TMultiBusRECV_NoColise); //}
.....
Функции LDD, CPI, ... - это есть дефайны ассемблерных вставок, например:
Код
#define LDD(Rd, Rb, K6) volatile asm("LDD %0, %a1+%2\n":"=r"(Rd) :"e"(Rb), "I"(K6)) //Description: Load Indirect with displacement |Operation: Rd = (Y+K6) |Flags: -------- |Cycles: 2
Компилятор выдает ошибки на строки 4 и 8 (именно те две строки, где используются два одинаковых offsetof(TMultiBus, Echo)), остальные строки проходят нормально.
error: impossible constraint in 'asm'
Вот я и хочу спросить, есть ли какие нибудь другие варианты?
Я могу ВСЁ, вопрос, сколько времени у меня это займет.