打印
[STM32F1]

STM32中 assert_param() 的使用

[复制链接]
944|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 740071911 于 2017-7-14 11:22 编辑

STM32中 assert_param() 的使用
       在STM32的固件库和提供的例程中,到处都可以见到assert_param()的使用。如果打开任何一个例程中的stm32f10x_conf.h文件,就可以看到实际上assert_param是一个宏定义;在固件库中,它的作用就是检测传递给函数的参数是否是有效的参数。
       所谓有效的参数是指满足规定范围的参数,比如某个参数的取值范围只能是小于3的正整数,如果给出的参数大于3,则这个assert_param() 可以在运行的程序调用到这个函数时报告错误,使程序员可以及时发现错误,而不必等到程序运行结果的错误而大费周折。
       这是一种常见的软件技术,可以在调试阶段帮助程序员快速地排除那些明显的错误。
       下图是在stm32库函数中遇到的函数assert_param()


      下图检测传递给函数的参数是否是有效


       这个宏定义的作用就是检查参数 PERIPH,判断参数PERIPH是否为GPIOX(A...G)基址中的一个,只要有一个为真则其值为真,否则为假,不用多说,这是C语言中基本的逻辑运算。

       当然这个库函数也用的好,首先对PERIPH进行取址,就是 &PERIPH,然后对这个地址强制转化为32位的指针,即前面加(uint32_t*),再然后通过*进行访问这个地址(指针)中的内容。

1.png (14.3 KB )

1.png

2.png (21.84 KB )

2.png

STM32中 assert_param() 的使用.pdf

187.45 KB

沙发
airwill| | 2017-7-15 16:53 | 只看该作者
看似没有啥用的一个功能, 其实为代码健壮性起不小的功劳.

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
740071911 + 3 很给力!
板凳
huangcunxiake| | 2017-7-15 22:31 | 只看该作者
感觉没啥用的,好奇葩的代码。

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
740071911 + 3 神马都是浮云
地板
huangcunxiake| | 2017-7-15 22:31 | 只看该作者
也不知道健壮到哪儿了。

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
740071911 + 3 淡定
5
泰山特曲123| | 2017-7-16 14:02 | 只看该作者
这个是断言,用来帮你自动发现代码的错误。

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
740071911 + 3 很给力!
6
jinggx| | 2017-7-17 08:44 | 只看该作者
牺牲点性能,这样当你的设计需求处于边界附近时,就要换更高级别的芯片,这样st就更加健壮!
关键的地方assert几个就可以了,搞得无处不没必要,参数错误debug时都会解决。

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
740071911 + 3 很给力!
7
740071911|  楼主 | 2017-7-18 09:01 | 只看该作者
huangcunxiake 发表于 2017-7-15 22:31
感觉没啥用的,好奇葩的代码。

在调试时,可以通过宏定义,使能,方便调试。待到实际应用时,可以把宏定义注释,就好了

使用特权

评论回复
8
740071911|  楼主 | 2017-7-18 09:03 | 只看该作者
jinggx 发表于 2017-7-17 08:44
牺牲点性能,这样当你的设计需求处于边界附近时,就要换更高级别的芯片,这样st就更加健壮!
关键的地方ass ...

是的,的确是无处不在样子,不过也只是调试用,无妨,只是影响观看视觉吧

使用特权

评论回复
9
740071911|  楼主 | 2017-7-18 09:03 | 只看该作者
airwill 发表于 2017-7-15 16:53
看似没有啥用的一个功能, 其实为代码健壮性起不小的功劳.

正解

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:想低声说句不在乎,可会飞的心总是在高处!

47

主题

871

帖子

5

粉丝