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

IAR Error[Li005]: no definition for ... Помогите

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

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

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


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

При компиляции файла uart2.c USE_UART2 не определено и вы по сути компилируете пустой файл. В результате не получаете в объектном файле всего что надекларировали в хидере.

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


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

Error[Li005]: no definition for "uart2_write" [referenced from ...\Debug\Obj\main.o] ... и т.д.

Получается линкер ищет эти функции в main.o а не в uart2.o

Ну нет же! В main всего лишь вызов этой функции, об этом линкер и напоминает.

Что-то не то у Вас с включением файла uart2 в проект. Может, стоит галка запрета.

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


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

#define USE_UART2

в файле main.c

а в файле uart2.c

#ifdef USE_UART2

надо перенести define в файл uart2.h, как общий для main.c и uart2.c

 

 

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


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

В файле uart2.c есть такие строчки:

#ifdef USE_RX2

#ifdef USE_TX2

а сами USE_RX2 и USE_TX2 нигде не определены.

 

Прототипы функций uart2_write и других объявлены в uart2.h, поэтому компиляция проходит без проблем, а при сборке выясняется что таких функций нигде нет.

 

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


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

Проект то я и не заметил.

 

Автор, точно сами библиотеку писали?

Потому как поставили условие компиляции, а дифайна нет.

 

Во первых, в свойствах проекта укажите этот злочастный USE_UART2

Во вторых незачем в проект включать хедеры

В третьих научитесь правильно определять и объявлять переменные в проектах со многими файлами.

В четвертых обратите внимание на предупреждения, проверка >=0 любого беззнакового числа дает положительный результат

ну и прочее.

 

Исправленный проект прилагаю2.ZIP

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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