Еще два года начал начал освоение avr, и как для человека далекого посоветовали CodeVision. Использую версию 2.04, т.к. под ней есть библиотеку для 18b20, и работы с SD картой.
Так сложилось, что проект начат тогда - развивается уже 2 года. В устройстве есть графический экран 128х60, SD карта, датчики 18b20, часы ds1307, и работа с rs232, АЦП.
До недавнего времени все было хорошо, добавлялись новые возможности... Размер hex файла подходил до 50 кб. (мега 128). Потом начали появлять совсем странные глюки. Например:
Подпрограмма 1 (работа с СД картой)
Подпрограмма 2 (то же работа с СД).
Так вот, первая работает, вторая нет. Сделал подпрограммы АБСОЛЮТНО одинаковыми, только название сменил. Не работают. Методом тыка, узнал, что если инициализацию СД карты вынести в третью подпрограмму, и вызывать ее отдельно - все работает. Но никакой разницы быть не должно.
Ну и ладно, работает и хорошо.
Дальше, оказалось что при опросе пина Порта Е, можно получить изменения переменных в ОЗУ или ЕЕПРОМ! Т.е. опрашиваю пин порта Е - а у меня меняется яркость подсветки, которая храниться в ЕЕПРОМ!
Еще дальше - еще хуже. Отказался от работы с пином порта Е, и снова все кое- как работает.
Добавил снова подпрограмму, размер до шел до 64 кб.
Таперь при попытке работать с СД картой - просиходит вообще чудеса, может вызваться подпрограмма которая никак не может вызваться, может быть зависание, мусор на экране, а если чтение таки пройдет - то в прочитанных данных просто мусор. Порой это данные с карты только с других файлов, порой это данных с самого микроконтроллера.
Я понимаю, что прочитав это скорее всего пошлете искать ошибки в коде, но какие ошибки могут привести к таким проблемамм? Компиляция идет без ошибок, только пара предупреждений что было бы хорошо переменную вместо int сделать long, но глюки идут да же есть эту подрограмму никогда не вызывать. Так же пробовал исключить места где идет запись в массив, типа ререполняю его, и порчу что-то в ОЗУ. Все равно проблемы.
Сейчас полность отказала работа с SD картой.
Так же есть ошибка, предупреждение, что в одной из подпрограмм флаг определен, но не используется.
А он опрашивается типа if (флаг & флаг2) бла-бла.
Все это наводит на мысль, что компилятор "запутывается" в коде.
Встречал ли кто-то подобные проблемы? Может надо на что-то обратить внимание? Очень много переменных, очень много. Много флагов. Использую от char до long int.
Самое паршивое, что использую много встроенных библиотек от CodeVision. И перейти на другой компилятор не могу
Ув. Коты, посоветуйте хоть что-то разумное, посоветуйте в какую сторону двигаться.


