Похоже, зараза, близкая к тому,
что было с ATmega1280/1281. Которая имеет 64 килослова флеша и, соответственно, 2-байтовый PC и отсутствие необходимости в командах EIJMP/EICALL и регистре EIND.
Упс! Я до сих пор не вбросил правку этого в репозиторий!
Похоже, в это воскресенье нужно выделить пол дня на подчистки scmRTOS/AVR
Проверка __AVR_3_BYTE_PC__ это хорошо, но макрос присутствует начиная с версии avr-gcc 4.1.2, поэтому необходимость резервирования места на стеке для дополнительного байта PC при инициализации начального стекового кадра я определял по EIND. В итоге нужна более сложная проверка. Или, наоборот, более простая — по макросу размера флеша FLASHEND.
Или отказ от поддержки версий до, например 4.3.2.
Там уже есть полный набор __AVR_HAVE_RAMPZ__ __AVR_HAVE_16BIT_SP__ и т.п.
Ну так вот. Не знаю, как в других сборках (может зависеть от версии avr-libc), но в имеющейся у меня в файле iom32u4.h
есть определение для регистра EIND, хотя его
нет в документации на кристалл.
Сделайте пока правку как в теме по линку.
А я решу что делать дальше.
Наверное, что-то в духе
Код
#if !defined(__AVR_3_BYTE_PC__) && !defined(__AVR_2_BYTE_PC__)
// опереться на FLASHEND < 0x20000
#endif