Доброго времени суток! Помогите разобраться, никак не могу понять в чем проблемма, вобщем есть ATmega8 к ней подключен дисплей от нокии 3310, программка довольнотаки примитивная, всего несколько вложенных менюшек. По началу написании программы все нормально, текст выводится правильно, но на каком то этапе, явно с увеличением текста программы, вместо текста появляется всякая хрень. Проект в CodeVisionAVR и модель в протеусе прилагаю , посмотреть глюки можно так: нажимаем кнопку меню, в меню перемещаемся по пунктам вверх и вниз кнопками Up/Down, кнопкой ОК входим в выбранный пункт меню, кнопкой Menu возвращаемся назад. И в этом меню как раз видно, в первом пункте еще нормальный текст, а в следующих уже хрен знает что. Причем если например написать текст внутри этих пунктов английскими буквами или заглавными русскими, то текст будет нормальным. Если посмотреть на таблицу шрифта, то видно что русские прописные буквы как раз в конце находятся, такое впечатление что по мере увеличения программы таблица шрифта начинает "портится" с низу. Но если например в последней менюшке использовать текст от другой, то он выведется нормально. Если в программе поменять местами процедуры вывода текста, то хрень эта будет уже в другом месте, в том что будет чисто по тексту программы последним. Пробовал вместо всех процедур вывода текста сделать одну через switch-case но в результате все точно так же. Для проверки собирал это все в железе, но там все так же как и в протеусе. Я так понимаю что то переполняется и лезет всякая хрень, но вот что, ну никак понять не могу.
Последний раз редактировалось hsl Сб июн 05, 2010 00:04:58, всего редактировалось 4 раз(а).
Скорее всего стек переполняется и вершина стека затирает шрифт, который ты умудрился задать в RAM а не в Flash. Храни шрифты в Flash. Расход Flash не уменьшится (потому что компилятор сохраняет твой шрифт в Flash, а при инициализации переменных, в т.ч. Массива шрифта копирует его из Flash в RAM), а такая проблема с RAM пропадет.
_________________ - Если вы такие умные, то почему тогда строем не ходите? ἓν οἶδα ὅτι οὐδὲν οἶδα (с) Σωκράτης
Скорее всего стек переполняется и вершина стека затирает шрифт, который ты умудрился задать в RAM а не в Flash. Храни шрифты в Flash. Расход Flash не уменьшится (потому что компилятор сохраняет твой шрифт в Flash, а при инициализации переменных, в т.ч. Массива шрифта копирует его из Flash в RAM), а такая проблема с RAM пропадет.
Хранить во Flash? А это разве не во Flash "flash char Font1 [256][6] =..." Сори если туплю, но я еще слабо разбираюсь в этом.
Или лучше скопируй её переобозвав к примеру LcdPutLineF(flash unsi.... И там где в качестве строки передаешь константную (т.е. в виде текста в кавычках "Положение1" к примеру) замени на вот эту преобразованную функцию. Т.е. у функции LcdPutLineF в качестве первого параметра (*data) будет указатель на строку в Flash памяти. А в текущем варианте у тебя передается указатель на массив в RAM и возможно при переполнении стека эти массивы и портятся.
_________________ - Если вы такие умные, то почему тогда строем не ходите? ἓν οἶδα ὅτι οὐδὲν οἶδα (с) Σωκράτης
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения