Перейти к содержанию
    

А как можно посмотреть какие функции включены в программу? 1,7к многовато (я думаю) )для кода:
Ну, приведенного кода тут байтов на 50, а вот внутри этих функций может быть сколько угодно. Посмотреть, какие функции включены, можно, поставив галочки генерации листинга и .map-файла. А потом долго медитировать над этими файлами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотреть, какие функции включены, можно, поставив галочки генерации листинга и .map-файла.

Поставил, посмотрел. Хочу знать мнение того кто смотрит на них не первый раз. Прикрепляю.

default.rar

 

Далее.

Судя по симптомам, не выдерживаете паузу от подачи питания до первой команды. Вставьте задержку миллисекунд 50-200 перед инициализацией.

Добавил задержку. ничего не изменилось. Менял опции оптимизации - нет результата. Но причина определена верно. Если физически (RESETом) сбросить конроллер при включенном LCD - все становится на свои места, программа нормально отображает обе строки. А по сему, как ввести эту задержку? Что только не делал... от delay_ms до for(i=1600;i>0;i--). Ничего не помогает. Ну точно оптимизиорует, ка как наверняка узнать? И что делать?

Изменено пользователем smk

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавил задержку. ничего не изменилось..

Если физически (RESETом) сбросить конроллер при включенном LCD - все становится на свои места, программа нормально отображает обе строки.

А может и не задержка виновата. Дисплей в каком режиме используется (8 или 4 битном)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4-х битном.
Глянул исходник - там совершенно неправильно сделана инициализация. Ошибок там минимум три -

1) После первых двух команд читать busy flag бессмысленно, надо делать задержки. Если память не изменяет - 200 и 50 мс.

2)LCD_FUNCTION_DEFAULT должен писаться четыре раза.

3)LCD_FUNCTION_DEFAULT первые 3 раза должен писаться в один проход независимо от режима - 8 или 4 битного, а не двумя тетрадами как в вашей реализации.

Поищите здесь по форуму, тема обсасывалась множество раз. В обсуждениях выкладывали даташит на контроллер, в котором описан алгоритм инициализации. Несколько исходников было в форуме по AVR в ветке "исходники программ и библиотек". .map гляну чуть позже.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Глянул исходник - там совершенно неправильно сделана инициализация. Ошибок там минимум три -

1) После первых двух команд читать busy flag бессмысленно, надо делать задержки. Если память не изменяет - 200 и 50 мс.

2)LCD_FUNCTION_DEFAULT должен писаться четыре раза.

3)LCD_FUNCTION_DEFAULT первые 3 раза должен писаться в один проход независимо от режима - 8 или 4 битного, а не двумя тетрадами как в вашей реализации.

Исправил. Все заработало. Даже не понадобилось делать задержку в начале программы. Огромное спасибо за подсказки и помощь!

 

Теперь, если можно, еще одна проблема у меня появилась. Ставил AVR Studio 4.13 на комп, кге уже установлен WinAVR2007. При инсталляции обнаружилась вот такая ощибка:

Error 1723: There is a problem with this Windows Installer package. A DLL required for this install to complete could not be run. Contact your support personnel or package vendor.

 

Система: Win2000 5.00.2195 SP4; 2 x PIII 1266 MHz AT/AT

 

Кто-нибудь знает какие пути устранения проблемы есть? Очень нужно иметь два рабочих места, так чтоб проект, начатый на одном компе можно было продолжать писать и симулировать на другом и т.п. Очень надо! Заранее благодарен!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

There is a problem with this Windows Installer package.

ОС не обновлшялась, если я установлю Windows Installer 3.1.4000.2435 есть ли шанс, что проблема решится?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

.map гляну чуть позже.

Не хочу навязываться, но всеж как со временем? Оч хочется довести до ума ситуацию. Заранее благодарю!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Оч хочется довести до ума ситуацию.
Ой. Извиняюсь. Давайте смотреть .map вместе:

.text           0x00000000      0x6a2  <- Итого во флеш попадает 1698 байт.
.vectors       0x00000000       0x26<- Вектора. Ненаказуемо. Заняты все.
.progmem.data  0x00000026       0x88 lcd.o <- 136 байт констант. Судя по следующей строке - знакогенератор
                0x00000026                LcdCustomChar
.text.main     0x000000e6       0x40 123.o   <- собственно main(), 64 байта
-------- дальше идут функции дисплея, которые вызываются из main или прерываний -------
.text.lcdInitHW              0x00000126       0x1a lcd.o
.text.lcdBusyWait           0x00000140       0x5c lcd.o
.text.lcdControlWrite      0x0000019c       0x64 lcd.o
.text.lcdControlRead      0x00000200       0x4e lcd.o
.text.lcdDataWrite         0x0000024e       0x64 lcd.o
.text.lcdGotoXY             0x000002b2       0x1a lcd.o
.text.lcdLoadCustomChar     0x000002cc       0x52 lcd.o
.text.lcdPrintData             0x0000031e       0x2a lcd.o
.text.lcdInit                     0x00000348       0x6e lcd.o
                                  ---------------------- итого 656 байт -----------------
а дальше ваши прерывания для таймера - 5 раз по 0x5A байт (450 байт)
.text.__vector_8           0x0000045e       0x5a timer.o
.text.__vector_6           0x00000538       0x5a timer.o
.text.__vector_7            0x00000592       0x5a timer.o
.text.__vector_5            0x000005ec       0x5a timer.o
.text.__vector_3            0x00000646       0x5a timer.o
и пара по 166 + 128 байт
.text.__vector_9            0x000003b8       0xa6 timer.o
.text.__vector_4             0x000004b8       0x80 timer.o

Мелкие секции я опустил. По имени секции в первой колонке вы можете узнать имя функции, по адресам из второй колонки можно в листинге найти получившийся код.

 

Зря вы решили читать флаг BUSY. Без него код получается значительно меньше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По имени секции в первой колонке вы можете узнать имя функции, по адресам из второй колонки можно в листинге найти получившийся код.

Спасибо! А вывод всеж какой делаем? Все хорошо или что-то не так? Я вот чуток дописал код. вывожу на LCD немножко текста и цифирки (счетчик цикла) так код стал 5к. Не верю что это нормально.

 

Зря вы решили читать флаг BUSY.

Это не я. Это AVRlib.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо! А вывод всеж какой делаем? Все хорошо или что-то не так?
Ну раз работает - значит хорошо. Вы находитесь на стадии, когда использование чужих библиотек ускоряет процесс разработки. Когда вы упретесь в нехватку памяти или скорости - перейдете на следующий уровень, когда библиотеки пишутся под себя с минимумом универсальности и максимумом эффективности.
Я вот чуток дописал код. вывожу на LCD немножко текста и цифирки (счетчик цикла) так код стал 5к. Не верю что это нормально.
Ну тогда берите исходник библиотеки и выкидывайте из него все лишнее. Я, например, так и не понял зачем у вас в прерываниях таймера вызов функций по указателю. Вы собираетесь подменять обработчики "на лету"? Все обработчики?

Это не я. Это AVRlib.
А голова у кого? ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А голова у кого?

Согласен.

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

К этому и стремлюсь. Для этого стараюсь разобраться как пишут другие, научится писать в WinAVR без ошибок в синтаксисе, понять как устроен проект, какие опции существуют... вот где почитать про сообщения об ошибках на русском?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

понять как устроен проект, какие опции существуют...
WinAVR\DOC\gcc, WinAVR\DOC\binutils\ld.html\index.html#Top, WinAVR\DOC\avr-libc\avr-libc-user-manual\index.html, WinAVR\DOC\avr-libc\avr-libc-user-manual\FAQ.html

 

вот где почитать про сообщения об ошибках на русском?
http://translate.google.com/translate_t?langpair=en|ru?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

WinAVR\DOC\gcc, WinAVR\DOC\binutils\ld.html\index.html#Top, WinAVR\DOC\avr-libc\avr-libc-user-manual\index.html, WinAVR\DOC\avr-libc\avr-libc-user-manual\FAQ.html

Читаю конечно. Описание стандартных функций нашел в книге Шпака... вобщем, учусь! Ждите еще вопросов, они наверняка появятся! Спасибо за ответы и потраченное на меня время!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...