creep 发表于 2015-6-29 22:17:52

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

下午写代码的时候,天气热一走神把一个库函数的参数写错了,因为库函数很多的参数都是宏定义,所以keil编译器也就没有提醒什么错误,可想而知最后程序肯定不能正常运行,反复查了几次都没有找到错误的地方,心想写过好多次的简单的外设驱动竟然都有问题,突然有点开始怀疑人生了。
在ST的库函数中有个assert_param()参数检测,其实也就是个断言,这在其他的语言里也很常见,主要用于参数的检测。使用ST库函数的断言比较简单,首先打开断言的宏定义:这个宏一般会于stm32fxxx_conf.h中,不使用这个在其他地方定义一个也可以

其次是检测到参数错误时候的提交警告,这就要自己实现函数assert_failed(),提示的方法的比较简单,比如打印输出,LCD显示,蜂鸣器报警,while(1)函数死循环,我们这里选择将错误信息输出到串口:

当遇到参数错误时,串口会输出在那个文件的那一行,然后调试程序在那里设个断点基本就可以知道是那句代码触发了参数检测输出。
由于ST的库函数很多参数都是宏定义,而有些错误的参数和正确的参数都是差不多的宏定义,这样就可能导致即使参数错误也检测不到。所以说这个方法局限很大,最好的方法还是自己尽量不出错。
随便找个参数错误测试下,串口输出如下:

测试代码:





风子 发表于 2015-6-29 22:21:19


creep 发表于 2015-6-29 22:32:04

风子 发表于 2015-6-29 22:21


好久不见,忙啥呢,

Paderboy 发表于 2015-6-30 00:18:27

学习了,多谢分享

beill8888 发表于 2015-6-30 08:11:02

关注               

数码小叶 发表于 2015-6-30 08:54:46

额 。。。。。。。。。还真没注意过,学习了{:3_41:}

stary666 发表于 2015-6-30 09:51:55

学习,,,,,,,,,

netlhx 发表于 2015-6-30 09:53:25

这个也可以放到工程选项里完成

mark0668 发表于 2015-6-30 09:58:01

多谢分享

creep 发表于 2015-6-30 10:09:27

netlhx 发表于 2015-6-30 09:53
这个也可以放到工程选项里完成

版主的意思是把这个宏USE_FULL_ASSERT定义在工程编译选项里面吗?
http://files.note.sdo.com/OMD2T~lp7VOW4M1AA0011m
页: [1] 2
查看完整版本: 【STM32F303开发】+库函数参数检查