STM_HAL: assert_param 与 assert_failed函数




assert_param:定义如下:

#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))

 作用:检测传递给函数的参数是否为有效的参数(有效的参数:指满足规定范围的参数,如某个参数的取值范围只能小于3的整数,若给出的参数大于3,则这个assert_param()可在运行的程序调用这个函数时报错,使程序员可及时发现错误,而不必等到程序运行结果的错误而大费周折。) 用于程序开发的时候,调试用的检测语句。默认是不开启的,你可以无视它的存在。但是,当你在调试程序的时候,可以打开这个检测机制,调试完了再关闭。

怎么使assert_param起作用?

查看assert_param的定义,位于stm32fxxx_hal_conf.h文件,它实际上是个宏定义,看它的条件编译语句,当USE_FULL_ASSERT定义后,即可打开assert_param这个参数检测机制。USE_FULL_ASSERT这个宏定义已经在文件中隐掉,我们把它的注释符号去掉即可。

#define USE_FULL_ASSERT    1


如果定义了USE_FULL_ASSERT,就把assert_param定义为一个三目运算的结构,否则,就把assert_param定义为((void)0)。也就是说,你只有定义;饿USE_FULL_ASSERT,assert_param才会起作用,这个作用就是通过一个三目运算结果来判断。


当你应以了USE_FULL_ASSET之后,若立即编译,编译器会报错,提示assert_failed函数没有定义。我们把assert_failed这个函数放到main.c文件中,如下定义:

void assert_failed(uint8_t* file, uint32_t line)
{
printf("Wrong parameters value: file %s on line %d\r\n", file, line);
while(1);
}

上面函数的意思:如果参数出错,输出出错的文件名和行号。结果是输出到串口,用串口调试助手可以看到输出结果。注意,编译器Build Output 栏是不会报错的。


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值