NeoMage 0 5 июня, 2012 Опубликовано 5 июня, 2012 (изменено) · Жалоба IAR для STM8. Написал себе библиотеку для работы с UART2 (uart2.h, uart2.c) Создаю новый проект, включаю в него: main.c uart2.h - описания функий для работы с UART uart2.c - сами функции для работы с UART Все файлы добавлены в проект и лежат в одном каталоге. В main.c пишу #include "uart2.h" и дальше использую функции UART2 Компилируется без ошибок но при сборке ругается на все используемые функции из uart2.c: Error[Li005]: no definition for "uart2_write" [referenced from ...\Debug\Obj\main.o] ... и т.д. Получается линкер ищет эти функции в main.o а не в uart2.o Если в main.с добавить #include "uart2.c", то все работает. В AVR Studio так делал постоянно: блоки переферии выносил в отдельные файлы и инклудил их при необходимости. Как в IAR так-же сделать? Подскажите пожалуйста. UART_Example.zip Изменено 5 июня, 2012 пользователем NeoMage Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alag57 1 5 июня, 2012 Опубликовано 5 июня, 2012 · Жалоба а если так? #define USE_UART2 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 5 июня, 2012 Опубликовано 5 июня, 2012 · Жалоба При компиляции файла uart2.c USE_UART2 не определено и вы по сути компилируете пустой файл. В результате не получаете в объектном файле всего что надекларировали в хидере. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 6 июня, 2012 Опубликовано 6 июня, 2012 · Жалоба Error[Li005]: no definition for "uart2_write" [referenced from ...\Debug\Obj\main.o] ... и т.д. Получается линкер ищет эти функции в main.o а не в uart2.o Ну нет же! В main всего лишь вызов этой функции, об этом линкер и напоминает. Что-то не то у Вас с включением файла uart2 в проект. Может, стоит галка запрета. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alag57 1 6 июня, 2012 Опубликовано 6 июня, 2012 · Жалоба #define USE_UART2 в файле main.c а в файле uart2.c #ifdef USE_UART2 надо перенести define в файл uart2.h, как общий для main.c и uart2.c Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 6 6 июня, 2012 Опубликовано 6 июня, 2012 · Жалоба В файле uart2.c есть такие строчки: #ifdef USE_RX2 #ifdef USE_TX2 а сами USE_RX2 и USE_TX2 нигде не определены. Прототипы функций uart2_write и других объявлены в uart2.h, поэтому компиляция проходит без проблем, а при сборке выясняется что таких функций нигде нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 6 июня, 2012 Опубликовано 6 июня, 2012 · Жалоба Проект то я и не заметил. Автор, точно сами библиотеку писали? Потому как поставили условие компиляции, а дифайна нет. Во первых, в свойствах проекта укажите этот злочастный USE_UART2 Во вторых незачем в проект включать хедеры В третьих научитесь правильно определять и объявлять переменные в проектах со многими файлами. В четвертых обратите внимание на предупреждения, проверка >=0 любого беззнакового числа дает положительный результат ну и прочее. Исправленный проект прилагаю2.ZIP Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NeoMage 0 6 июня, 2012 Опубликовано 6 июня, 2012 · Жалоба Всем спасибо. Все исправил. Все заработало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться