реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Правильное подключение библиотек IAR для AVR
Dele
сообщение Apr 18 2012, 10:14
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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;
}

Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 18 2012, 10:33
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 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 =)
Go to the top of the page
 
+Quote Post
Dele
сообщение Apr 19 2012, 10:10
Сообщение #3


Участник
*

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



Этот заголовочный файл sm.gif включил в проект, правой кнопкой мыши на проекте в дереве файлов ->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
Почему так?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 19 2012, 10:22
Сообщение #4


Гуру
******

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



QUOTE (Dele @ Apr 19 2012, 13:10) *
Стало меньше Warning но 2 Error так и остались...
Потому что в проект надо включать не заголовочный файл *.h, а файлы с исходным кодом *.c


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Dele
сообщение Apr 20 2012, 10:43
Сообщение #5


Участник
*

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



Включил, все так же. Видимо библиотека не устраивает конктретно этот компилятор.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 20 2012, 11:13
Сообщение #6


Гуру
******

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



QUOTE (Dele @ Apr 20 2012, 13:43) *
Включил, все так же. Видимо библиотека не устраивает конктретно этот компилятор.
Это, простите, не в библиотеке дело. Вызов функций, определенных в другой единице компиляции делает любой компилятор языка Си. Прикладывайте архив с вашим проектом или такую же картинку как в начале, с деревом файлов проекта - что-то вы делаете или не делаете не так.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Dele
сообщение Apr 21 2012, 21:45
Сообщение #7


Участник
*

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



Так же поменял в заголовочном файле дисплея типы unit8_t на unsignet char, добавил некоторые заголовочные файлы типа delay.h и io.h из CVAVR так как их не хватало в IAR
Эскизы прикрепленных изображений
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  led_avr_prot.rar ( 29.94 килобайт ) Кол-во скачиваний: 14
 
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Apr 21 2012, 23:59
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 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-файлы в проект включать не нужно.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Apr 22 2012, 15:13
Сообщение #9


Нечётный пользователь.
******

Группа: Свой
Сообщений: 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>, то это должно привести только к увеличению времени поиска файла и всё.
Указывать файлы внешних по отношению к проекту библиотек (даже если они свои собственные) в угловых скобках смысл есть — так виднее, что они не часть этого проекта, а взяты извне.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 23 2012, 06:12
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
Dele
сообщение Apr 23 2012, 06:56
Сообщение #11


Участник
*

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



Так же все, закинул файлы в общую папку, подключил. Раскоментировал hd44780.c вылезло куча ошибок, как то порты видимо не правильно названы...

Сообщение отредактировал Dele - Apr 23 2012, 06:56
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Dele
сообщение Apr 23 2012, 08:44
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 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 вроде как нормально переварил, не ругался особо, когда закоментировал .с файл, сейчас уже другая проблема, порты как то не так называются судя по всему...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 23 2012, 09:02
Сообщение #13


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
Dele
сообщение Apr 23 2012, 09:39
Сообщение #14


Участник
*

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



Да, походу библиотека непонятная какая то, я вот сейчас скачал на msp430 и сразу без проблем запустил в IAR, буду на msp430 эксперементировать...
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Apr 24 2012, 14:22
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 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$\. Ещё одно действие.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 10:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.01495 секунд с 7
ELECTRONIX ©2004-2016