ААААААААААААААААААААААААААААААА!!!!!!
Нашел причину всех моих неудач за последний месяц!
Идея была в том, чтобы написать культурный HAL на основе mspgcc-шного iostructures.h
И что я сегодня заметил?!
Код
static void ClearWatchDog(void)
{
SYS_WDT.out.SYS_WDT_PIN = 1;
5300: b2 d0 80 00 bis #128, &0x001e;#0x0080
5304: 1e 00
/main/../platform/watchdog_lo_level.h:27
SYS_WDT.out.SYS_WDT_PIN = 0;
5306: b2 f0 7f ff and #-129, &0x001e;#0xff7f
530a: 1e 00
SYS_WDT - это port4:
#if defined(__MSP430_HAS_PORT4__) || defined(__MSP430_HAS_PORT4_R__)
__MSP430_EXTERN__ struct port_simple_t port4 asm("0x001c");
#endif
, где
Код
struct port_simple_t {
ioregister_t in; /* Input */ ->1c
ioregister_t out; /* Output */ ->1d
[b] ioregister_t dir; /* Direction */ ->1e[/b]
ioregister_t sel; /* Selection */
};
Ну и каких, собственно, аллюзий out стал по адресу 1e?
То есть всё как бы съехало на 1 адрес, и я вместо того чтобы махнуть ногой, переключаю направление...
После такого стресса перестаёшь верить в разумное и доброе, хочется выдернуть шнур и выдавить стекло.
И в отпуск на полгода...
Ну а это уже ни в какие рамки:
Код
static void WatchDogInit(void)
{
SYS_WDT.out.SYS_WDT_PIN = 0;
44e8: 3f 40 1e 00 mov #30, r15;#0x001e
44ec: bf f0 7f ff and #-129, 0(r15);#0xff7f, 0x0000(r15)
44f0: 00 00
/main/../platform/watchdog_lo_level.h:16
SYS_WDT.sel.SYS_WDT_PIN = 0;
44f2: bf f0 7f ff and #-129, 4(r15);#0xff7f, 0x0004(r15)
44f6: 04 00
/main/../platform/watchdog_lo_level.h:17
SYS_WDT.dir.SYS_WDT_PIN = 1;
44f8: bf d0 80 00 bis #128, 2(r15);#0x0080, 0x0002(r15)
44fc: 02 00
Поля структуры просто перетасованы в каком-то непонятном порядке... и всё сдвинуто
Но ведь работало же как-то раньше!
Кажись допёр... Структуры должны быть packed

Может есть такой ключик, чтобы все структуры упаковать?
А то по одной долго возиться, да и править системные исходники не совсем идеологически правильно
######
__attribute__ ((packed)) не помог...
все регистры по 2 байта.
Со старым компилятором то же самое.
Что за жизнь пошла...
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)