Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не могу полностью подключить библиотеку в KEIL
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
zheka
Господа, есть проект для Keil и STM32F4. Захотелось мне подключить библиотеку
Запускаю их инструмент "Manage Runtime Environment" ставлю галочку напротив RCC, жму Resolve
ВРоде бы все нормально. Но при линковке появляется ошибка undefined symbol assert_param (from misc.o)

Ну и в самом файле misc красным подчеркнут assert_param.

Мне думалось, что если подключение осуществляется галочкой, то среда сама сделает все что нужно.

Но это еще не все - ошибка остается, даже если RCC библиотеку отключить и очистить проект.

Как решить проблему?
zheka
Неужели никто не знает?
Повторюсь - при линковке вылазит ошибка - код L6218E: Undefined symbol assert_param (referred from misc.o).
SSerge
Надо было в примеры заглянуть, там в каждом main.c есть примерно такой кусок
CODE
#ifdef USE_FULL_ASSERT
/**
* @brief The assert_param macro is used for function's parameters check.
* @param expr: If expr is false, it calls assert_failed function
* which reports the name of the source file and the source
* line number of the call that failed.
* If expr is true, it returns no value.
* @retval None
*/
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
/* Exported functions ------------------------------------------------------- */
void assert_failed(uint8_t* file, uint32_t line);
#else
#define assert_param(expr) ((void)0)
#endif /* USE_FULL_ASSERT */

и такой
CODE
#ifdef USE_FULL_ASSERT

/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

/* Infinite loop */
while (1)
{
}
}
#endif

zheka
Вставил.
Ошибка не исчезла

Заглянул в примеры (от свежей, пятой версии) - там нет такого кода. Это не мешает добавлятьгалки GPIO и RCC и нормально компилироваться.

А приведенные фрагменты - да, приходилось раньше видеть.

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

Я не пойму, что-то поменялось в философии Keil в 5 версии?
Натыкал я галочками все что мне нужно, доволен... Но вот потребовалось подключить файл с обработкой прерываний "stm32f4xx_it.h"
Что я сделал
1. Добавил файл в дерево проекта
2. ДОбавил путь к папке с .h файлами (хотя там пусто, где же новый keil хранит эти пути?
3. Добавил в main.c строку #include "stm32f4xx_it.h"

Вылетают ошибки

Цитата
.\out\mynewapp.axf: Error: L6218E: Undefined symbol DCMI_ClearITPendingBit (referred from stm32f4xx_it.o).
.\out\mynewapp.axf: Error: L6218E: Undefined symbol DCMI_GetITStatus (referred from stm32f4xx_it.o).
.\out\mynewapp.axf: Error: L6218E: Undefined symbol DMA_ClearITPendingBit (referred from stm32f4xx_it.o).
.\out\mynewapp.axf: Error: L6218E: Undefined symbol DMA_GetITStatus (referred from stm32f4xx_it.o).

Я что-то забыл сделать?
aaarrr
Глобальный дефайн USE_STDPERIPH_DRIVER поставили? Без него stm32f4xx_conf.h не подцепится.
zheka
Цитата(aaarrr @ Apr 15 2015, 19:00) *
Глобальный дефайн USE_STDPERIPH_DRIVER поставили? Без него stm32f4xx_conf.h не подцепится.

Так ведь визард в 5 версии подключает HAL библиотеку - замену STD.
Вот я раджи интереса добавил глобальный дефайн - вылезло 90 ошибок их файлов HAL

А stm32f4xx_conf.h у меня и так подцепилась к main.c (судя по дереву проекта)
aaarrr
Цитата(zheka @ Apr 15 2015, 19:10) *
Так ведь визард в 5 версии подключает HAL библиотеку - замену STD.

Ох уж эти визарды. Так ведь в проекте у Вас собирается StdPeriph, от него и ошибки.

Цитата(zheka @ Apr 15 2015, 19:10) *
А stm32f4xx_conf.h у меня и так подцепилась к main.c (судя по дереву проекта)

К main.c его подцеплять бесполезно, он должен быть подключен на этапе компиляции misc.c, иначе оно не соберется.
zheka
Ага... черт.. нужно ж было галки напротив DCMI и DMA поставить, ошибки исчезли. И даже без глобальногог дефайна все компилится.

Но чертов assert_param остался...
с ним ЧЕ ДЕЛАТЬ?


Цитата
Ох уж эти визарды

Я не сторонник визардов. Но проект собранный с помощью визарда я скачал в сети - это был единственный рабочий проект с USB_CDC, который я искал месяц под свою среду и свой камень. Причем версии библиотек в нем строго определенные, поставить другие, даже самые последние - не будет работать комповый драйвер виртуального компорта. Так что тут у меня руки связаны.

Цитата
К main.c его подцеплять бесполезно

А я специально и не цеплял. Просто он есть в ниспадающем списке от main.c, значит проект его видит.
zheka
НАшел, где эти ассерты определены - в stm32f4xx_conf.h
Ну так он же подключен, чего ему не хвататет?

Копаю дальше...
Вместо USE_STDPERIPH теперь нужно писать USE_HAL_DRIVER.

Но.. в моей версии библиотек 1.0.8 нет HAL драйвера, судя по папкам там все же SPL. Однако директива USE_STDPERIPH_DRIVER вызывает кучу ошибок в файлах в папке RTE_DRIVER
Ды ешкин кот, что ж делать-то..
aaarrr
Цитата(zheka @ Apr 15 2015, 20:41) *
НАшел, где эти ассерты определены - в stm32f4xx_conf.h
Ну так он же подключен, чего ему не хвататет?

В проект включен, а в исходниках библиотек игнорируется из-за отсутствия USE_STDPERIPH_DRIVER.

Цитата(zheka @ Apr 15 2015, 20:41) *
Но.. в моей версии библиотек 1.0.8 нет HAL драйвера, судя по папкам там все же SPL. Однако директива USE_STDPERIPH_DRIVER вызывает кучу ошибок в файлах в папке RTE_DRIVER
Ды ешкин кот, что ж делать-то..

Какие ошибки?
zheka
ОШибка одна и та же D:\Keil Projects\mynewapp\RTE\Device\STM32F407VG\stm32f4xx_conf.h(90): error: #5: cannot open source input file "misc.h": No such file or directory
А дальше загадочная строка #include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */

Подключаю Misc.h из папки D:\Keil\ARM\Pack\Keil\STM32F4xx_DFP\1.0.8\Device\StdPeriph_Driver\inc
И появляются 90 ошибок типа
Цитата
D:\Keil\ARM\PACK\Keil\STM32F4xx_DFP\1.0.8\RTE_Driver\GPIO_STM32F4xx.h(85): error: #40: expected an identifier
GPIO_AF_TIM14 = 9,
aaarrr
Цитата(zheka @ Apr 15 2015, 20:58) *
ОШибка одна и та же D:\Keil Projects\mynewapp\RTE\Device\STM32F407VG\stm32f4xx_conf.h(90): error: #5: cannot open source input file "misc.h": No such file or directory
А дальше загадочная строка #include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */

Значит, не находит пути к misc.h в дебрях StdPeriph. Попробуйте руками прописать.
zheka



Цитата
Значит, не находит пути к misc.h в дебрях StdPeriph. Попробуйте руками прописать.

Весь пост прочтите.

Ну вот, более точная версия. Есть чем попробовать скомпилить?
zheka
Помогла вставка указанного выше дефайна в stm32f4xx.h
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.