[STM32F1] STM32中 assert_param() 的使用

[复制链接]
1212|8
 楼主| 740071911 发表于 2017-7-14 11:20 | 显示全部楼层 |阅读模式
本帖最后由 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
2.png

STM32中 assert_param() 的使用.pdf

187.45 KB, 下载次数: 15

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 淡定

查看全部评分

泰山特曲123 发表于 2017-7-16 14:02 来自手机 | 显示全部楼层
这个是断言,用来帮你自动发现代码的错误。

评分

参与人数 1威望 +3 收起 理由
740071911 + 3 很给力!

查看全部评分

jinggx 发表于 2017-7-17 08:44 | 显示全部楼层
牺牲点性能,这样当你的设计需求处于边界附近时,就要换更高级别的芯片,这样st就更加健壮!
关键的地方assert几个就可以了,搞得无处不没必要,参数错误debug时都会解决。

评分

参与人数 1威望 +3 收起 理由
740071911 + 3 很给力!

查看全部评分

 楼主| 740071911 发表于 2017-7-18 09:01 | 显示全部楼层
huangcunxiake 发表于 2017-7-15 22:31
感觉没啥用的,好奇葩的代码。

在调试时,可以通过宏定义,使能,方便调试。待到实际应用时,可以把宏定义注释,就好了
 楼主| 740071911 发表于 2017-7-18 09:03 | 显示全部楼层
jinggx 发表于 2017-7-17 08:44
牺牲点性能,这样当你的设计需求处于边界附近时,就要换更高级别的芯片,这样st就更加健壮!
关键的地方ass ...

是的,的确是无处不在样子,不过也只是调试用,无妨,只是影响观看视觉吧
 楼主| 740071911 发表于 2017-7-18 09:03 | 显示全部楼层
airwill 发表于 2017-7-15 16:53
看似没有啥用的一个功能, 其实为代码健壮性起不小的功劳.

正解
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

48

主题

887

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部