您的位置 首页 开关

STM32库函数中assert_param句子的用法解析

STM32库函数中assert_param语句的用法解析-assert_param语句是用于程序开发的时候,调试用的检测语句。默认是不开启的,你可以无视它的存在。但是,当你在调试程序的时候,可以打开这个检测机制,调试完了再关闭。

运用STM32库函数的时分,你会发现带参数的库函数前面都有assert_param句子。

例如咱们随意看一个库函数,如下所示:

STM32库函数中assert_param句子的用法解析

这个函数是3.5版别库函数stm32f10x_TIm.c中的定时器复位函数。

assert_param句子的效果?

assert_param句子是用于程序开发的时分,调试用的检测句子。默许是不敞开的,你能够无视它的存在。可是,当你在调试程序的时分,能够翻开这个检测机制,调试完了再封闭。

怎样使assert_param起效果?

检查assert_param的界说,坐落stm32f10x_conf.h文件,你会发现它实际上是个宏,看它的条件编译句子,你会发现,把USE_FULL_ASSERT界说后,即可翻开assert_param这个参数检测机制。USE_FULL_ASSERT这个宏界说已经在文件中隐掉,咱们把它的注释符号去掉即可。

STM32库函数中assert_param句子的用法解析

STM32库函数中assert_param句子的用法解析

看上图中第59行代码,是个条件编译句子,意思是:假如界说了USE_FULL_ASSERT,就把assert_param界说为一个三目运算的结构(第68行),不然(第71行),就把assert_param界说成((void)0)(第72行)。也便是说,你只要界说了USE_FULL_ASSERT,assert_param才会起效果,这个效果便是经过一个三目运算结构(如下)来判别的。关于三目运算的基础知识,请看http://www.raTIonmcu.com/clang/382.html

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

assert_param句子的效果是检测函数的参数是否契合该函数的要求,例如上面的函数中的参数便是TIMx,咱们找到IS_TIM_ALL_PERIPH这个界说,能够看到TIMx中的x的规模是1~17,也便是说,你要是把函数写成TIM_DeInit(TIM1);assert_param的成果便是(void)0,假如你把函数写成TIM_DeInit(TIM18);就会调用assert_failed函数。

#defineIS_TIM_ALL_PERIPH(PERIPH)(((PERIPH)==TIM1)||\((PERIPH)==TIM2)||\((PERIPH)==TIM3)||\((PERIPH)==TIM4)||\((PERIPH)==TIM5)||\((PERIPH)==TIM6)||\((PERIPH)==TIM7)||\((PERIPH)==TIM8)||\((PERIPH)==TIM9)||\((PERIPH)==TIM10)||\((PERIPH)==TIM11)||\((PERIPH)==TIM12)||\((PERIPH)==TIM13)||\((PERIPH)==TIM14)||\((PERIPH)==TIM15)||\((PERIPH)==TIM16)||\((PERIPH)==TIM17))

assert_failed函数怎样写?

STM32库函数中assert_param句子的用法解析

如上,当你界说了USE_FULL_ASSET之后,你当即编译,编译器会报错,提示assert_failed函数没有界说。咱们把assert_failed这个函数放到mian.c文件中,如下界说:

voidassert_failed(uint8_t*file,uint32_tline){printf(“Wrongparametersvalue:file%sonline%d\r\n”,file,line);while(1);}

上面函数的意思便是,假如参数犯错,输出犯错的文件名称和行号。成果是输出到串口,用串口调试帮手能够看到输出成果。留意,编译器Build Output栏是不会报错的。

下面给出一个例程,成心写错参数,经过STM32串口1把过错参数的文件名称和行数发到串口,你翻开串口调试帮手即可看到成果。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/kaiguan/346637.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部