你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 4751|回复: 19

[STM32F3] 【STM32F303开发】+库函数参数检查

[复制链接]

60

主题

2051

回帖

31

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2015-6-29 22:17:52 | 显示全部楼层 |阅读模式
下午写代码的时候,天气热一走神把一个库函数的参数写错了,因为库函数很多的参数都是宏定义,所以keil编译器也就没有提醒什么错误,可想而知最后程序肯定不能正常运行,反复查了几次都没有找到错误的地方,心想写过好多次的简单的外设驱动竟然都有问题,突然有点开始怀疑人生了。
在ST的库函数中有个assert_param()参数检测,其实也就是个断言,这在其他的语言里也很常见,主要用于参数的检测。使用ST库函数的断言比较简单,首先打开断言的宏定义:这个宏一般会于stm32fxxx_conf.h中,不使用这个在其他地方定义一个也可以
断言.jpg
其次是检测到参数错误时候的提交警告,这就要自己实现函数assert_failed(),提示的方法的比较简单,比如打印输出,LCD显示,蜂鸣器报警,while(1)函数死循环,我们这里选择将错误信息输出到串口:
断言.jpg
当遇到参数错误时,串口会输出在那个文件的那一行,然后调试程序在那里设个断点基本就可以知道是那句代码触发了参数检测输出。
由于ST的库函数很多参数都是宏定义,而有些错误的参数和正确的参数都是差不多的宏定义,这样就可能导致即使参数错误也检测不到。所以说这个方法局限很大,最好的方法还是自己尽量不出错。
随便找个参数错误测试下,串口输出如下:
断言.jpg
测试代码:
F303RE_Assert.rar (397.96 KB, 下载次数: 76)
回复

使用道具 举报

33

主题

1243

回帖

0

蝴蝶豆

论坛元老

最后登录
2019-3-9
发表于 2015-6-29 22:21:19 | 显示全部楼层
谢谢分享.png
回复 支持 反对

使用道具 举报

60

主题

2051

回帖

31

蝴蝶豆

版主

最后登录
2020-12-9
 楼主| 发表于 2015-6-29 22:32:04 | 显示全部楼层

好久不见,忙啥呢,
回复 支持 反对

使用道具 举报

47

主题

3404

回帖

30

蝴蝶豆

版主

最后登录
2020-12-7
发表于 2015-6-30 00:18:27 | 显示全部楼层
学习了,多谢分享
回复 支持 反对

使用道具 举报

5

主题

756

回帖

0

蝴蝶豆

论坛元老

最后登录
2020-12-9
发表于 2015-6-30 08:11:02 | 显示全部楼层
关注               
回复 支持 反对

使用道具 举报

52

主题

3313

回帖

61

蝴蝶豆

论坛元老

最后登录
2020-12-9
发表于 2015-6-30 08:54:46 | 显示全部楼层
额 。。。。。。。。。还真没注意过,学习了
回复 支持 反对

使用道具 举报

100

主题

3617

回帖

1

蝴蝶豆

论坛元老

最后登录
2020-12-8
发表于 2015-6-30 09:51:55 | 显示全部楼层
学习,,,,,,,,,
回复 支持 反对

使用道具 举报

107

主题

812

回帖

5

蝴蝶豆

论坛元老

最后登录
2019-8-28
发表于 2015-6-30 09:53:25 | 显示全部楼层
这个也可以放到工程选项里完成
回复 支持 反对

使用道具 举报

47

主题

1210

回帖

5

蝴蝶豆

论坛元老

最后登录
2020-8-13
发表于 2015-6-30 09:58:01 | 显示全部楼层
多谢分享
回复 支持 反对

使用道具 举报

60

主题

2051

回帖

31

蝴蝶豆

版主

最后登录
2020-12-9
 楼主| 发表于 2015-6-30 10:09:27 | 显示全部楼层
netlhx 发表于 2015-6-30 09:53
这个也可以放到工程选项里完成

版主的意思是把这个宏USE_FULL_ASSERT定义在工程编译选项里面吗?

回复 支持 反对

使用道具 举报

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版