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

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

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

举报

19个回答
creep 回答时间:2015-6-30 10:09:27
netlhx 发表于 2015-6-30 09:53
这个也可以放到工程选项里完成

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

creep 回答时间:2015-8-4 22:50:29
陈子建-2001061 发表于 2015-8-4 22:44
写个程序就是这么麻烦啊

Just for fun !!
阿本 回答时间:2015-6-30 08:11:02
关注               
风子 回答时间:2015-6-29 22:21:19
谢谢分享.png
creep 回答时间:2015-6-29 22:32:04

好久不见,忙啥呢,
Paderboy 回答时间:2015-6-30 00:18:27
学习了,多谢分享
wyxy163@126.com 回答时间:2015-6-30 08:54:46
提示: 作者被禁止或删除 内容自动屏蔽
stary666 回答时间:2015-6-30 09:51:55
学习,,,,,,,,,
netlhx 回答时间:2015-6-30 09:53:25
这个也可以放到工程选项里完成
mark0668 回答时间:2015-6-30 09:58:01
多谢分享
风子 回答时间:2015-6-30 10:50:44
creep 发表于 2015-6-29 22:32
好久不见,忙啥呢,

搬家
星辰一方 回答时间:2015-6-30 11:20:10
路过……帮顶~
creep 回答时间:2015-6-30 11:30:54

感谢路过的
bear1968516 回答时间:2015-8-4 20:33:07
这个好东西,感谢分享!
steven陈 回答时间:2015-8-4 22:44:46
写个程序就是这么麻烦啊
12下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版