MDK报错:Undefined symbol assert_failed报错解决策略

MDK报错:Undefined symbol assert_failed报错解决策略


  • 🎯🪕在全网搜索相关MDK编译报错:Error: L6218E: Undefined symbol assert_param (referred from xxx.o).

✨有些问题看似很简单,可能产生的问题是由于不经意的细节原因导致。引起报错的问题有很多种可能,没有放之四海皆准的解决方案。

  • 🌿提供的解决问题的可能方案一:添加宏定义USE_STDPERIPH_DRIVER
    在这里插入图片描述
  • 🌿提供的解决问题的可能方案二:没有将相对应的驱动头文件(.h)路径包含进来或者是源文件(.c)添加到工程中。
  • 🔖这里针对的是具体的驱动文件或驱动头文件。
    在这里插入图片描述
    在这里插入图片描述
  • 🌿提供的解决问题的可能方案三:在main.c文件中,补充下面的void assert_failed()断言报错函数:
#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 CODE BEGIN 6 */
    /* User can add his own implementation to report the file name and line number,
       tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
    /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */
✨很多外部导入的工程源码,添加完标准库文件后,编译报此错误,往往可能是忽略标准库驱动文件中定义了此断言assert_failed函数,却没有写实现的地方,才会出现有调用assert_param宏的驱动文件中报错。

、

/* Exported macro ------------------------------------------------------------*/
#define USE_FULL_ASSERT

#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)0U : assert_failed((uint8_t *)__FILE__, __LINE__))
    /* Exported functions ------------------------------------------------------- */
    void assert_failed(uint8_t *file, uint32_t line);
#else
    #define assert_param(expr) ((void)0U)
#endif /* USE_FULL_ASSERT */
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值