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

 
 
> ошибка в stm32f4xx_conf.h с assert_param
Tapochka
сообщение Jul 2 2013, 07:40
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 26-02-13
Пользователь №: 75 799



Решил разобраться с таймерами в stm32. В итоге прога компилится, однако линкер в Keil выдает timer.axf: Error: L6218E: Undefined symbol assert_param (reffered from stm32f4xx_gpio.o). ну естественно разобрался откуда берется эта assert_param - из stm32f4xx_conf.h(код приведен ниже):

CODE
***************************************************************************
***
* @file USART/HyperTerminal_Interrupt/stm32f4xx_conf.h
* @author MCD Application Team
* @version V1.0.1
* @date 13-April-2012
* @brief Library configuration file.
***************************************************************************
***
* @attention
*
* <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
*
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.st.com/software_license_agreement_liberty_v2
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
***************************************************************************
***
*/

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F4xx_CONF_H
#define __STM32F4xx_CONF_H


#if defined (HSE_VALUE)
/* Redefine the HSE value; it's equal to 8 MHz on the STM32F4-DISCOVERY Kit */
#undef HSE_VALUE
#define HSE_VALUE ((uint32_t)8000000)
#endif /* HSE_VALUE */

/* Includes ------------------------------------------------------------------*/
/* Uncomment the line below to enable peripheral header file inclusion */
/*#include "stm32f4xx_adc.h"
#include "stm32f4xx_can.h"
#include "stm32f4xx_crc.h"
#include "stm32f4xx_cryp.h"
#include "stm32f4xx_dac.h"
#include "stm32f4xx_dbgmcu.h"
#include "stm32f4xx_dcmi.h"
#include "stm32f4xx_dma.h"
#include "stm32f4xx_exti.h"
#include "stm32f4xx_flash.h"
#include "stm32f4xx_fsmc.h"
#include "stm32f4xx_hash.h" */
#include "stm32f4xx_gpio.h"
/* #include "stm32f4xx_i2c.h"
#include "stm32f4xx_iwdg.h"
#include "stm32f4xx_pwr.h" */
#include "stm32f4xx_rcc.h"
/* #include "stm32f4xx_rng.h"
#include "stm32f4xx_rtc.h"
#include "stm32f4xx_sdio.h"
#include "stm32f4xx_spi.h"
#include "stm32f4xx_syscfg.h"*/
#include "stm32f4xx_tim.h"
/*#include "stm32f4xx_usart.h"
#include "stm32f4xx_wwdg.h"
#include "misc.h" *//* High level functions for NVIC and SysTick (add-on to CMSIS functions) */

/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/

/* If an external clock source is used, then the value of the following define
should be set to the value of the external clock source, else, if no external
clock is used, keep this define commented */
/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */


/* Uncomment the line below to expanse the "assert_param" macro in the
Standard Peripheral Library drivers code */
/* #define USE_FULL_ASSERT 1 */

/* Exported macro ------------------------------------------------------------*/
#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 */

#endif /*__STM32F4xx_CONF_H */

/************************ © COPYRIGHT STMicroelectronics *****END OF FILE****/


Сказано, что нужно раскомментить #define USE_FULL_ASSERT - я раскомментил, так же раскомментил необходимые файлы сверху, однако проблема не решается, выдает все тоже самое. Помогите, у кого было подобное

Сообщение отредактировал IgorKossak - Jul 2 2013, 09:08
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aBoomest
сообщение Aug 16 2018, 20:20
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 167
Регистрация: 24-12-08
Из: Россия
Пользователь №: 42 714



Та же проблема на STM32F429. Инфа в инете есть. Проблема решена, но нихрена (простите) не понятна, ни с т.з. физики происходящего, ни с т.з. организации программы. Хотелось бы сообща разобраться.
Конкретика:
Цитата(bseyur @ Jul 2 2013, 15:06) *
В stm32f4xx_gpio.c должно быть, как минимум, #include stm32f4xx_conf.h, т.к. в последнем дано определение assert_param
Цитата(bseyur @ Jul 2 2013, 13:50) *
Так закомментируйте обратно #define USE_FULL_ASSERT - вместо assert_param будет стоять заглушка.
А ошибка, скорее всего, из-за того, что в stm32f4xx_gpio.с не подключен нужный заголовочный файл.
Мне, например, совершенно не ясно а почему же он там не подключен сразу? Т.е. каждому пользователю библиотек (вероятно 99% пользователей) при создании проекта необходимо редактировать библиотеки от производителя МК. Т.е. во всех файлах библиотеки (_gpio.c, _rcc.c, . . . etc) необходимо вручную прописывать либо #include stm32f4xx_conf.h, либо добавить строчку #define assert_param(expr) ((void)0). И это во ВСЕХ ФАЙЛАХ, поставляемых производителем, где есть эта функция.
Более того в stm32f4xx_conf.h имеют место уже свои инклуды. И их не мало. И след-но надо, либо все это протащить в проект (даже если оно вам не нужно), либо опять же, снова, еще раз уже в других местах редактировать файл библиотеки и как-то это обходить. Не исключено, что по цепочке еще что-то вылезет, не проверял.
Логически вытекающий вопрос:
Совершенно не понятен такой подход: обязательная необходимость для создание проекта редактировать библиотеки от производителей. Это уже в этом случае перестает быть похожим на библиотеку, если оно требует обязательных изменений. Так это такой подход, или я чего-то не понимаю?

PS: Вообще, первый раз в жизни с подобным сталкиваюсь. И ведь это не глюк, это типа нормально. Я понимаю (несколько раз сталкивался), когда имеет место глюк, и приходится библиотеку производителя корректировать и вкомпиливать себе уже что-то свое - переделанное. Но в данном же случае получается, что это надо делать всегда, для каждого проекта. В моем понимании, библиотека (тем более написанная не энтузиастами, а самими производителями, это то, что подключается к проекту и используется, но никак не редактируется)


--------------------
C уважением!
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 20th August 2025 - 22:21
Рейтинг@Mail.ru


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