Форум РадиоКот https://radiokot.ru/forum/ |
|
ATmega8, проблеммы с выводом текстовой строки на дисплей https://radiokot.ru/forum/viewtopic.php?f=20&t=30897 |
Страница 1 из 1 |
Автор: | hsl [ Вт июн 01, 2010 20:13:50 ] |
Заголовок сообщения: | ATmega8, проблеммы с выводом текстовой строки на дисплей |
Доброго времени суток! Помогите разобраться, никак не могу понять в чем проблемма, вобщем есть ATmega8 к ней подключен дисплей от нокии 3310, программка довольнотаки примитивная, всего несколько вложенных менюшек. По началу написании программы все нормально, текст выводится правильно, но на каком то этапе, явно с увеличением текста программы, вместо текста появляется всякая хрень. Проект в CodeVisionAVR и модель в протеусе прилагаю , посмотреть глюки можно так: нажимаем кнопку меню, в меню перемещаемся по пунктам вверх и вниз кнопками Up/Down, кнопкой ОК входим в выбранный пункт меню, кнопкой Menu возвращаемся назад. И в этом меню как раз видно, в первом пункте еще нормальный текст, а в следующих уже хрен знает что. Причем если например написать текст внутри этих пунктов английскими буквами или заглавными русскими, то текст будет нормальным. Если посмотреть на таблицу шрифта, то видно что русские прописные буквы как раз в конце находятся, такое впечатление что по мере увеличения программы таблица шрифта начинает "портится" с низу. Но если например в последней менюшке использовать текст от другой, то он выведется нормально. Если в программе поменять местами процедуры вывода текста, то хрень эта будет уже в другом месте, в том что будет чисто по тексту программы последним. Пробовал вместо всех процедур вывода текста сделать одну через switch-case но в результате все точно так же. Для проверки собирал это все в железе, но там все так же как и в протеусе. Я так понимаю что то переполняется и лезет всякая хрень, но вот что, ну никак понять не могу. |
Автор: | DrWatson [ Вт июн 01, 2010 20:22:22 ] |
Заголовок сообщения: | Re: ATmega8, проблеммы с выводом текстовой строки на дисплей |
Скорее всего стек переполняется и вершина стека затирает шрифт, который ты умудрился задать в RAM а не в Flash. Храни шрифты в Flash. Расход Flash не уменьшится (потому что компилятор сохраняет твой шрифт в Flash, а при инициализации переменных, в т.ч. Массива шрифта копирует его из Flash в RAM), а такая проблема с RAM пропадет. |
Автор: | hsl [ Вт июн 01, 2010 22:08:07 ] |
Заголовок сообщения: | Re: ATmega8, проблеммы с выводом текстовой строки на дисплей |
DrWatson писал(а): Скорее всего стек переполняется и вершина стека затирает шрифт, который ты умудрился задать в RAM а не в Flash. Храни шрифты в Flash. Расход Flash не уменьшится (потому что компилятор сохраняет твой шрифт в Flash, а при инициализации переменных, в т.ч. Массива шрифта копирует его из Flash в RAM), а такая проблема с RAM пропадет. Хранить во Flash? А это разве не во Flash "flash char Font1 [256][6] =..." Сори если туплю, но я еще слабо разбираюсь в этом. |
Автор: | DrWatson [ Вт июн 01, 2010 22:11:25 ] |
Заголовок сообщения: | Re: ATmega8, проблеммы с выводом текстовой строки на дисплей |
а текстовые строки? может они искажаются. И где обещанный исходник? |
Автор: | hsl [ Вт июн 01, 2010 22:16:41 ] |
Заголовок сообщения: | Re: ATmega8, проблеммы с выводом текстовой строки на дисплей |
Да ступил, пока писал забыл про исходник совсем, добавил ссылку. |
Автор: | DrWatson [ Вт июн 01, 2010 22:35:20 ] |
Заголовок сообщения: | Re: ATmega8, проблеммы с выводом текстовой строки на дисплей |
Попробуй для начала в файле nokia_lcd.c изменить определение функции Код: void LcdPutLine(unsigned char *data, unsigned char x,unsigned char y) на: Код: void LcdPutLine(flash unsigned char *data, unsigned char x,unsigned char y) Или лучше скопируй её переобозвав к примеру LcdPutLineF(flash unsi.... И там где в качестве строки передаешь константную (т.е. в виде текста в кавычках "Положение1" к примеру) замени на вот эту преобразованную функцию. Т.е. у функции LcdPutLineF в качестве первого параметра (*data) будет указатель на строку в Flash памяти. А в текущем варианте у тебя передается указатель на массив в RAM и возможно при переполнении стека эти массивы и портятся. |
Автор: | hsl [ Вт июн 01, 2010 22:55:03 ] |
Заголовок сообщения: | Re: ATmega8, проблеммы с выводом текстовой строки на дисплей |
DrWatson большое спасибо, все заработало! |
Автор: | DrWatson [ Вт июн 01, 2010 23:02:44 ] |
Заголовок сообщения: | Re: ATmega8, проблеммы с выводом текстовой строки на дисплей |
нема за шо ![]() |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |