Проблема начала возникать когда использование флеш перевалило за 40%. Программа в некоторых местах отправляет информацию на дисплей, но делает это некорректно. Дисплей тут непричём, тк пробовал разные, в том числе и на контроллере hd44780. Причём баги возникают случайно, то есть в некоторых местах программы отображение происходит корректно, а в некоторых нет(причём если в некотором месте баги проявились, то не перепрошивка, не ресет и ничего в этом духе не поможет, они будут одни и те же).
Проще показать на примере. Итак, кусочек кода:
Код: Выделить всё
LCDStr(0,0,int_to_string(0);
LCDStr(3,0,int_to_string(15));
LCDStr(5,0,":");
LCDStr(6,0,int_to_string(30));
LCDStr(9,0,"Ред");
LCDStr(3,1,"Выход");
LCDStr(8,1,"~");Вроде бы всё понятно и отобразиться должно так:
_____
0 15:30 Ред
Выход~
_____
Но вместо этого отображается следущее:
_____
0 15~30 Ред
Выходд
_____
то есть вместо строки ":" печатается строка "~", а вместо "~" - "д", причём буква "д" является окончанием предыдущей строки. и это судя по всему важно, так как если просто поменять строчки в коде местами, то характер бага измениться. к примеру, сделаем вот так:
Код: Выделить всё
LCDStr(0,0,int_to_string(0);
LCDStr(3,0,int_to_string(15));
LCDStr(6,0,int_to_string(30));
LCDStr(8,1,"~");
LCDStr(9,0,"Ред");
LCDStr(3,1,"Выход");
LCDStr(5,0,":");
то отобразиться следущее:
_____
0 15д30 Ред
Выход~
_____
Пробовал определять строчки через #define - не помогло.
Ещё раз напомню, что в индикаторе ошибок нет, проблема в програмном коде. Кроме того иногда, если переписать функцию, в которой работает кусочек с выводом на экран(например, приведённый выше), при этом полностью переделав структуру ИФов и СВИТЧей, то баг чудесным образом может пропасть. а может и не пропасть. На такая работа в любом случае некорректна. Код пишу в CVAVR.
Это может быть браком микроконтроллера, или ошибкой при компиляции... это догадки, подскажите, в чём тут дело!
Зы. функция LCDStr(x,y,str) пишет строку str с x-того места на y-ковой строке.
функция int_to_string(x) возвращает строку с числом x.