Решил я перейти с Асма на С. Поставил WinAVR, avr-lib. Пишу в AVRStudio 4.12.
Все бы хорошо, но решил использовать библиотеки из avr-lib (http://hubbard.engr.scu.edu/embedded/avr/avrlib/).
При использовании библиотек (например uart/h) компиллер выдает ошибки.
Помогите неучу, только сильно не пинайте, как подключать библиотеки ьакого плана, где есть .h файл и описание функций в .c файле.
Интересно поподробнее узнать как это все работает. Пробовал CodeVision, но там он сам все как-то делает, что мне не нравится. Хочется процес контролировать.
defunct
Mar 6 2006, 20:38
Цитата(MRW @ Mar 6 2006, 20:23)

как подключать библиотеки ьакого плана, где есть .h файл и описание функций в .c файле.
.c подключить к проекту, а заголовки .h присоединять с помощью include "путь\имя.h"
Все используеиые компоненты .c подключать в AVRStudio (Add to file)?
Я думал он сам понимает, что подключать.
beer_warrior
Mar 7 2006, 11:50
#include <x> включает текст файла x на место директивы.
.с .lib .obj файлы должны явно указываться чтобы попасть в компиляцию
Советую поиграться с родными для дистрибутива Prog Notepad и MFile
тогда процесс сборки станет понятным.
Спасибо большое, а то я кучу времени пытался это победить. Теперь пошло.
bullit
Jun 22 2007, 19:28
Люди добрые помогите. Я только учусь.
Установил AvrLib, WinAvr. WinAvr работает без проблем. Пишу в NP.
Решил подключить avrlib.
Но он у меня сразу ошибки нашел, это мол не так, то нетак.
Может нужно использовать только его библиотеки, или они лиш дополнения к основным.
WinAvr и drvlib самые последние.
mdmitry
Jun 22 2007, 21:51
Цитата(bullit @ Jun 22 2007, 23:28)

Люди добрые помогите. Я только учусь.
Установил AvrLib, WinAvr. WinAvr работает без проблем. Пишу в NP.
Решил подключить avrlib.
Но он у меня сразу ошибки нашел, это мол не так, то нетак.
Может нужно использовать только его библиотеки, или они лиш дополнения к основным.
WinAvr и drvlib самые последние.
Какие ошибки? Может быть библиотеки в makefile не указаны для линкера?
bullit
Jun 23 2007, 11:23
Папка с моими программами находится не в папке с WinAvr и Avrlib. Структура папок в приложенном файле.
Подключил его так:
#include <AVRLib/uart.h> и в "" заключал и прямой путь указывал, все бестолку
И в мейк файле, через Mfile.exe, дабавлял uart.c файл? как сишный сорс.
Ошибка такая: uartproba.c:11:25: warning: AVRLib/uart.h: No such file or directory
Что нетак делаю.
Притом программы экземплы внутри avrlib выполняются. Что теперь пути менять, но как? И почему это происходит? Объясните пожалуйста.
Переменная среды как AVRLIB есть.
Или такую ошибку: make: *** No rule to make target `uartproba.elf', needed by `elf'. Stop.
the_victor
Jun 24 2007, 12:46
Цитата(bullit @ Jun 23 2007, 14:23)

#include <AVRLib/uart.h> и в "" заключал и прямой путь указывал, все бестолку
И в мейк файле, через Mfile.exe, дабавлял uart.c файл? как сишный сорс.
Ошибка такая: uartproba.c:11:25: warning: AVRLib/uart.h: No such file or directory
путь указан не верно
прописать полный путь
#include <d:\dev\avr\AVRLib\uart.h>
или
#include <..\AVRLib\uart.h>
Цитата
Или такую ошибку: make: *** No rule to make target `uartproba.elf', needed by `elf'. Stop.
хз, может косяк с makefile.
попробовать создать при помощи входящей в комплект winavr утилиты MFile [WinAVR]
bullit
Jun 24 2007, 16:35
я тут еще не пробывал. Но говорят файлик global.h надо кидать в папку с проектом.
Так? И какие воопче надо делать процедуры, чтоб проект запахал.
makefile делаю именно утилитой MFile.
bullit
Jun 24 2007, 19:24
А как-то использовать avrlib-овский мейкфайл нужно. Или с помощью утилиты MFile.exe как нибудь настраивать?
mdmitry
Jun 24 2007, 20:41
В makefile можно, а в Вашем нужно указать директорию для дополнительных includ'ов. Есть строка в файле, добавить также, что надо линковать из дополнительных библиотек.
bullit
Jun 24 2007, 21:13
Выглядит эта строка в мейкфайле так?
Код
########### you should not need to change the following line #############
include bla-bla-bla
И почему ругается на это:
$(AVRLIB)/ в майкфайле? Хотя переменная среды существует.
Avrlib конечно заработал, но после того как я все его файлы кторые упоминались в инклудах себе в папку запихал. А нельзя без такого гемороя?
mdmitry
Jun 25 2007, 06:47
Цитата(bullit @ Jun 25 2007, 01:13)

Выглядит эта строка в мейкфайле так?
Код
########### you should not need to change the following line #############
include bla-bla-bla
Конечно не так! Для утилиты make существуют свои правила написания makefile. -I и другие команды.
В файле существуют комментированные строки с описанием того, что за команда. Их можно раскомментировать и дополнить. Почитайте, пожалуйста, документацию к этой утилите. С помощью нее можно много чего делать.
bullit
Jun 26 2007, 08:28
Гы. С ангельским не очень дружу.
Пойду смотреть дальше. Просто думал кто подскажет. Придется самому, нет времени. програмирую в свободное время, которого нет.
mdmitry
Jun 26 2007, 09:56
Из makefile:
SRC = сюда файлы для компиляции через пробел, указать полный пуль к необходимым исходникам от avrlib ( типа $AVRLIB\xxx.c)
EXTRAINCDIRS = указать директорию, где лежат *.h от avrlib
LDFLAGS к этому ключу при необходимости добавить указания на библиотеки.
удачи.
bullit
Jun 26 2007, 10:13
Спасибо. Только перед этим хотел проверить эту директиву.
А вот по поводу строки $AVRLIB\xxx.c , её так нужно писать или так: $(AVRLIB)\xxx.c ? Я конечно проверю, но в makefile написанно с скобках.
И по поводу LDFLAGS, какие библиотеки сюда подключаются. Если можно в примере.
bullit
Jun 26 2007, 11:26
Что-то не помогло. Может кто скинет пример. так чеб все видно было. + структуру катологов. Где проекты и где avrlib с WinAVR.
Ошибка не исчезла: undefined reference to `uartInit'
Все как выше написанно сделал. Не помогает.
Работа стоит.
Заранее большое спасибо.
mdmitry
Jun 27 2007, 11:59
В makefile для include
EXTRAINCDIRS = $(AVRLIB)/conf $(AVRLIB)
Исходники от AVRLIB я не смог скомпилировать указав что-то похожее
SRC = test1.c test2.c $(AVRLIB)/uart2.c
Make ругается на цели, похоже не любит исходники в разных директориях. Даже указание полного пути к test2.c приводит к ошибке.
Возможный путь решения:
IMHO: avrlib дается в исходниках, то соответствующие xxx.c в рабочий каталог, а в makefile их добавить и указать EXTRAINCDIRS = $(AVRLIB)/conf $(AVRLIB)
В этом случае все собирается. Библиотека универсальная. Например, работа с COM портом сильно навороченная (буферы). Можно взять идеи и сделать покороче и быстрее, о чем в форуме уже говорилось.
успехов.
bullit
Jun 27 2007, 12:09
Именно тот способ что вы предлагаете у меня и за работал изначально. Просто я считал, что можно и без переносов файлов. Просто указал пути и всё. А может быть тому причина наклон слеша. В хелпе написанно обратный слеш. Не пробывали.
Кстати тоже примеры из АВРЛИБа не компилировались - странно.
Думаю перенести папку с АВРЛИБом в WINAVR - может поможет. Одним словом танцы с бубном и тыканье пальца...
mdmitry
Jun 27 2007, 18:53
Цитата(bullit @ Jun 27 2007, 16:09)

А может быть тому причина наклон слеша. В хелпе написанно обратный слеш. Не пробывали.
Кстати тоже примеры из АВРЛИБа не компилировались - странно.
Думаю перенести папку с АВРЛИБом в WINAVR - может поможет. Одним словом танцы с бубном и тыканье пальца...
Слэшы пробовал оба, не прошло.
Перенос папки скорее всего не поможет.
Сам AVRLIB довольно старый по времени создания, в нем используются старые макро. Современный WINAVR более "строгий". Я включаю почти все предупреждения и на AVRLIB их идет масса, причем не всегда безобидных. Для своих проектов не использую AVRLIB.
bullit
Jun 27 2007, 19:10
Не используете их в чистом виде? Или используете в переработанном виде?
А как avrlib подключать в AVRStudio? Где именно? И главное как?
Чтоб такой проблемы не было.
mdmitry
Jun 28 2007, 20:36
Цитата(bullit @ Jun 27 2007, 23:10)

Не используете их в чистом виде? Или используете в переработанном виде?
А как avrlib подключать в AVRStudio? Где именно? И главное как?
Не использую, библиотека универсальная в ущерб скорости (IMXO), идеи работы хорошие, их и использую. Например, UART на мой взгляд наворочен сильно, своя версия с кольцевыми буферами быстрее работает.
mdmitry
Jun 29 2007, 10:49
В добавлении к предыдущему:
Для компиляции из нескольких мест можно использовать VPATH, надо только аккуратно обойтись с путями для объектных файлов (команда notdir).
В приложении описания GNU make на русском с примерами, надеюсь поможет подправить Вам свой makefile.
bullit
Jun 29 2007, 10:54
Большое спасибо.
Как не крути, а на первых парах лучше разобраться как роботает чужой код, чем его править.
Пока все не заработает как нужно, переделкой либа я не буду заниматься. А там глядиш и не надо будет.
Если еще актуально
Код
AVRLIB=C:\Programming\AvrLib
AVRLIBMODULES = buffer.c uart.c rprintf.c timer.c vt100.c debug.c cmdline.c extint.c
VPATH = .:$(AVRLIB)
SRC = main.c intelIf2.c $(AVRLIBMODULES)
Кусок рабочего makefile

Цитата(bullit @ Jun 26 2007, 12:28)

Гы. С ангельским не очень дружу.
Пойду смотреть дальше. Просто думал кто подскажет. Придется самому, нет времени. програмирую в свободное время, которого нет.
opennetи
Программа управления компиляцией GNU make 3.73- Старовато , но для начала сойдет
bullit
Jun 29 2007, 17:09
Спасибо большое.
Всё это актуально. + тому кто сюда придет с таким же вопросом
А как avrlib использовать в проектах AVRStudio.
Если там она запахает, буду студию использовать.
Бегаю между PN из WinAVR и Студией.
mdmitry
Jun 29 2007, 20:27
Цитата(bullit @ Jun 29 2007, 21:09)

А как avrlib использовать в проектах AVRStudio.
Если там она запахает, буду студию использовать.
Бегаю между PN из WinAVR и Студией.
Я использую в качестве IDE Eclipse. Мне нравится больше, чем PN и редактор от AVRStudio. Где-то на форуме вопрос о IDE уже поднимался.
bullit
Jun 29 2007, 20:29
Поисчу обезательно.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.