在调试STM8的时候出现了这个问题,即函数assert_failed 未定义。
之前没有使用库文件,全部自己调用寄存器编制的程序就没有碰到这种问题。
在头文件stm8s_conf.h中对函数有引用:
- #ifndef FULL_ASSERT /* FULL_ASSERT not defined */
- void assert_failed(void);
- #define assert_param(expr) ((expr) ? (void)(0) : assert_failed())
- #else /* FULL_ASSERT defined */
- void assert_failed(u8 *file, u16 line);
- #define assert_param(expr) ((expr) ? (void)(0) : assert_failed(__FILE__, __LINE__))
- #endif
出现报错是由于使用的main文件模板时将以下的函数删掉了!所以直接加上相应的函数就OK!
在main.c文件的末尾添加以下的语句:
- #ifdef FULL_ASSERT
- <pre>/**
- * @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(u8* file, u32 line)
- {
- /* User can add his own implementation to report the file name and line number,
- ex: printf(“Wrong parameters value: file %s on line %drn”, file, line) */
- /* Infinite loop */
- while (1)
- {
- }
- }
- #endif
注意定义的时候函数格式要与引用的时候对应上,一种带参数一种不带参数。
楼主您好,我的stn8s_config.h里是这样的
#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 /* __STM8S_CONF_H */
这个跟您的不一样,但是根据您的建议更改了#ifdef FULL_ASSERT及后面的语句后又出现新的报错
#error cpstm8 stm8s_stdperiph_lib\stm8s_stdperiph_driver\inc\stm8s_gpio.h:153 bad #endif
真的找不出解决办法了,真心向您求助
过了这么几天,应该解决了吧?看告警像是格式错误,是不是 #endif多了一个?看你这个结尾有俩,多了导致和别的文件冲突了。