|
|
  |
Правильное подключение библиотек IAR для AVR |
|
|
|
Apr 18 2012, 10:14
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 12-06-10
Пользователь №: 57 898

|
Добрый день! Не могу подключить нормально библиотеку для работы с LCD, библиотеку нашел тут http://life.netimperia.com/2010/08/08/hd44780-avr/Создал в протеусе проект с дисплеем и atmega16 но до заливки прошивки дело так и не дошло... Сам я только познаю азы программирования под МК. Воспользовался IAR, мне он показался удобным... Так вот, файлы с архива засунул в C:\Program Files\IAR Systems\Embedded Workbench 6.0\avr\inc конкретно hd44780.c, hd44780.h Но не запускается ничего, выдает ошибки, что ему еще надо? #include <ioavr.h> #include <hd44780.h> #include <intrinsics.h> #include <delay.h> #include <stdlib.h> #include <iom16.h> void lcd_puts(const char *s) { register char c; while ( (c = *s++) ) { HD44780_SEND_CHAR©; } } int main(void) { hd44780_init(); HD44780_SEND_CURSOR_POS(0, 0); lcd_puts("Counter"); return 0; }
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 18 2012, 10:33
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(Dele @ Apr 18 2012, 14:14)  Так вот, файлы с архива засунул в C:\Program Files\IAR Systems\Embedded Workbench 6.0\avr\inc конкретно hd44780.c, hd44780.h Но не запускается ничего, выдает ошибки, что ему еще надо? Надо было засунуть... (гусары, молчать! ©) hd44780.c и hd44780.h надо просто включить в проект. И никуда не засовывать. И уже учите матчасть, что такое библиотеки и чем они отличаются от исходников. (то, что у вас - это, строго говоря, никакие не библиотеки) Алсо, код на форуме принято оформлять в теги code или codebox, иначе читать неудобно.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Apr 19 2012, 10:10
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 12-06-10
Пользователь №: 57 898

|
Этот заголовочный файл  включил в проект, правой кнопкой мыши на проекте в дереве файлов ->Add files->hd44780.h Стало меньше Warning но 2 Error так и остались... Error[e46]: Undefined external "hd44780_send_command" referred in main Error[e46]: Undefined external "hd44780_init" referred in main Почему так?
|
|
|
|
|
Apr 20 2012, 10:43
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 12-06-10
Пользователь №: 57 898

|
Включил, все так же. Видимо библиотека не устраивает конктретно этот компилятор.
|
|
|
|
|
Apr 21 2012, 21:45
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 12-06-10
Пользователь №: 57 898

|
Так же поменял в заголовочном файле дисплея типы unit8_t на unsignet char, добавил некоторые заголовочные файлы типа delay.h и io.h из CVAVR так как их не хватало в IAR
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 21 2012, 23:59
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(Dele @ Apr 22 2012, 00:45)  Так же поменял в заголовочном файле дисплея типы unit8_t на unsignet char, добавил некоторые заголовочные файлы типа delay.h и io.h из CVAVR так как их не хватало в IAR 1.У вас в проекте пути никак на прописаны (типа так:$PROJ_DIR$\hd44780\). Либо можно все расположить в одной директории. Функции init и send возможно не определены. 2. Надо не Код include <hd44780.h> а так: Код include "hd44780.h" 3. H-файлы в проект включать не нужно.
|
|
|
|
|
Apr 22 2012, 15:13
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(_Артём_ @ Apr 22 2012, 02:59)  2. Надо не Код include <hd44780.h> а так: Код include "hd44780.h" Должно быть в некотором смысле всё равно. Файлы в угловых скобках компилятор начинает искать в «системных» каталогах (что с собой несёт), потом переходит к «пользовательским», указанным в командной строке/опциях среды. А в кавычках — наоборот, начинает искать в пользовательских, потом ищет в «системных». Поэтому если указывать "ioavr.h" и <my_super_lib.h>, то это должно привести только к увеличению времени поиска файла и всё. Указывать файлы внешних по отношению к проекту библиотек (даже если они свои собственные) в угловых скобках смысл есть — так виднее, что они не часть этого проекта, а взяты извне.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Apr 23 2012, 06:12
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Посмотрел на ваш архив. Причина в том, что кто-то закомментировал все содержимое hd44780.c: CODE /* <------- #include "hd44780.h"
...... // Входим в режим работы и устанавливем направление курсора и сдвиг экрана. HD44780_SEND_ENTRY_MODE(HD44780_CONFIG_CURSOR_DIRECTION, HD44780_CONFIG_CURSOR_LCD_SHIFT);
}
*/ <------------- QUOTE (Dele @ Apr 22 2012, 00:45)  Так же поменял в заголовочном файле дисплея типы unit8_t на unsignet char, Глупость. Добавили ненужной писаниниы и ухудшили портируемость. QUOTE (Dele @ Apr 22 2012, 00:45)  добавил некоторые заголовочные файлы типа delay.h и io.h из CVAVR так как их не хватало в IAR Может быть их не зря не хватало? ИАР может не переварить системные заголовочные файлы от CVAVR. Просто потому, что в них могут использоваться какие-то нестандартные расширения компилятора (не говоря уже о том, что CVAVR является компилятором не С, а "языка, похожего на С"). Для задержек в IAR AVR есть встроенная (intrinsic) функция __delay_cycles().
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Apr 23 2012, 06:56
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 12-06-10
Пользователь №: 57 898

|
Так же все, закинул файлы в общую папку, подключил. Раскоментировал hd44780.c вылезло куча ошибок, как то порты видимо не правильно названы...
Сообщение отредактировал Dele - Apr 23 2012, 06:56
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 23 2012, 08:44
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 12-06-10
Пользователь №: 57 898

|
Цитата(Сергей Борщ @ Apr 23 2012, 09:12)  Посмотрел на ваш архив. Причина в том, что кто-то закомментировал все содержимое hd44780.c: Код /* <------- #include "hd44780.h"
...... // Входим в режим работы и устанавливем направление курсора и сдвиг экрана. HD44780_SEND_ENTRY_MODE(HD44780_CONFIG_CURSOR_DIRECTION, HD44780_CONFIG_CURSOR_LCD_SHIFT);
}
*/ <------------- Глупость. Добавили ненужной писаниниы и ухудшили портируемость. Может быть их не зря не хватало? ИАР может не переварить системные заголовочные файлы от CVAVR. Просто потому, что в них могут использоваться какие-то нестандартные расширения компилятора (не говоря уже о том, что CVAVR является компилятором не С, а "языка, похожего на С"). Для задержек в IAR AVR есть встроенная (intrinsic) функция __delay_cycles(). unit8_t на unsignet char Поменял потому что IAR вообще не знал что такое unit8_t. Файлы с CVAVR вроде как нормально переварил, не ругался особо, когда закоментировал .с файл, сейчас уже другая проблема, порты как то не так называются судя по всему...
|
|
|
|
|
Apr 23 2012, 09:02
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (Dele @ Apr 23 2012, 11:44)  unit8_t на unsignet char Поменял потому что IAR вообще не знал что такое unit8_t. Знал, как и любой компилятор, поддерживающий стандарт С99. Вероятно автор этих примеров забыл добавить в начало заголовочного файла #include <stdint.h>. Или он добавил, а вы в настройках проекта выбрали использование библиотеки CLIB, а это в IAR такой способ указать поддержку стандарта C89 (в котором такого заголовочного файла еще не было). Чтобы работать в стандарте C99 надо выбрать библиотеку DLIB. QUOTE (Dele @ Apr 23 2012, 11:44)  сейчас уже другая проблема, порты как то не так называются судя по всему... Вероятно в CVAVR есть дополнительные #define для номеров битов, вроде #define PD0 0. Но какой смысл сначала HD44780_CONFIG_D0_PIN превращать из 0 в PD0 при помощи HD44780_PORT_DATA_PIN(HD44780_CONFIG_D0_PIN), а потом обратно в 0 при помощи #define PD0 0? Достаточно было написать CODE /*if(d & (1 << 0)) { c |= (1 << HD44780_PORT_DATA_PIN(HD44780_CONFIG_D0_PIN)); }*/ if(d & (1 << 0)) { c |= 1 << HD44780_CONFIG_D0_PIN; } В общем как-то уж очень мутно написана эта библиотека.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Apr 23 2012, 09:39
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 12-06-10
Пользователь №: 57 898

|
Да, походу библиотека непонятная какая то, я вот сейчас скачал на msp430 и сразу без проблем запустил в IAR, буду на msp430 эксперементировать...
|
|
|
|
|
Apr 24 2012, 14:22
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(ReAl @ Apr 22 2012, 18:13)  Должно быть в некотором смысле всё равно. Файлы в угловых скобках компилятор начинает искать в «системных» каталогах (что с собой несёт), потом переходит к «пользовательским», указанным в командной строке/опциях среды. А в кавычках — наоборот, начинает искать в пользовательских, потом ищет в «системных». Поэтому если указывать "ioavr.h" и <my_super_lib.h>, то это должно привести только к увеличению времени поиска файла и всё. Не только увеличение времени. Нужно ещё дополнительно пути прописывать: создал проект из файлов main.cpp, func.cpp. В main вызывается функция func, описанная в func.h (все три файла в одной папке). Если написано #include "func.h" - компилируется, если #include <func.h>: Цитата Fatal Error[Pe1696]: cannot open source file "func.h" searched: "C:\Program Files\IAR Systems\Embedded Workbench 6.0\avr\inc\" searched: "C:\Program Files\IAR Systems\Embedded Workbench 6.0\avr\inc\dlib\c\" searched: "C:\Program Files\IAR Systems\Embedded Workbench 6.0\avr\inc\dlib\ecpp\" В настройках проекта нужно указывать $PROJ_DIR$\. Ещё одно действие.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|