Бля, два дня почти убил на поиски глюков в программе (аппаратного
отладчика для этого кристалла у меня нет, а все в реалтайме, да
завязано на протоколе обмена с таймаутами арбитражем шины и
прочим... но не суть, суть в том, что трабла оказалась в выделении
памяти с использованием директив условной компиляции. Ассемблер АВР, в проге - десятки директив условной компиляции (чтоб не делать прогу на разные варианты устройства, просто в дефах ставлю тип устройства и прога сама собирается как надо, включая и исключая соответсвующий код. Но, блин стоило включить выделение памяти в директиву условной компиляции, как
появились необъяснимые глюки работы программы (точнее один глюк, стабильный, объяснять долго, связано с логикой обработки протокола обмена данными)
Мучился два дня, пока допёр в чём дело...
и вроде никакого криминала, но стоило убрать #ifdef/#endif, как всё встало на свои места. Кто бы мог подумать :( причём подобные приёмы использую не первый раз, и в гораздо более извращённой тяжёлой форме.
#ifdef DEBUG_Version ;Выделение памяти под отладочные переменные, если включено определение "DEBUG_Version"
#warning 'Debug functions is activated. Dont forget switch-off DEBUG_Version definition on Release!!'
S_DebugFlags: .byte 1;Регистр флагов для отладки.
;* Флаги:
#define F_Debug7 7 ;
#define M_Debug7 bit7 ;
#define F_Debug6 6 ;
#define M_Debug6 bit6 ;
#define F_Debug5 5 ;
#define M_Debug5 bit5 ;
#define F_Debug4 4 ;
#define M_Debug4 bit4 ;
#define F_Debug3 3 ;
#define M_Debug3 bit3 ;
#define F_Debug2 2 ;
#define M_Debug2 bit2 ;
#define F_Debug1 1 ;
#define M_Debug1 bit1 ;
#define F_Debug0 0 ;
#define M_Debug0 bit0 ;
;--
S_DebugEventTimer: .byte 1 ;Таймер "жизни" отладочного события (после установки отладочного флага макросом "SetDebugFlag")
S_DebugDATAbufer: .byte 255 ;Отладочный UART-буфер данных
#endif ;
Блин, понятно конечно, что компилятор с препроцессором (даже ассемблера) весьма ветиеватая штука, но, блин такие глюки словить.....
Как теперь верить тому, что он собирает?? (Атмелстудия 7 если что) Пока правда на десятках программ проблем не было замечено, всё работает как надо, но этот случай... два дня выпавших из жизни и куча потраченных нервов и море выпитой у меня крови... окончательно выбили меня из колеи :( (хоть есть небольшое чувство удовлетворения, что причина найдена, но остался вопрос "почему так" ??)
сталкивался кто с таким? Типичные возможные глюки софта??
да, перполнение стека исключено, т.к. зарезервированные в дебаг-версии 256 байт, в релизе, резервируются под рабочий буфер.