ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
21 ноября
1236703
Adept (04.09.2022 17:57, просмотров: 2752) m16
Бля, два дня почти убил на поиски глюков в программе (аппаратного отладчика для этого кристалла у меня нет, а все в реалтайме, да завязано на протоколе обмена с таймаутами арбитражем шины и прочим... но не суть, суть в том, что трабла оказалась в выделении памяти с использованием директив условной компиляции. 

Ассемблер АВР, в проге - десятки директив условной компиляции (чтоб не делать прогу на разные варианты устройства, просто в дефах ставлю тип устройства и прога сама собирается как надо, включая и исключая соответсвующий код. Но, блин стоило включить выделение памяти в директиву условной компиляции, как

появились необъяснимые глюки работы программы (точнее один глюк, стабильный, объяснять долго, связано с логикой обработки протокола обмена данными)

Мучился два дня, пока допёр в чём дело...

и вроде никакого криминала, но стоило убрать #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 байт, в релизе, резервируются под рабочий буфер.

...делать нужно так, как нужно. А как ненужно - делать не нужно (С) Винни-Пух :)