下午写代码的时候,天气热一走神把一个库函数的参数写错了,因为库函数很多的参数都是宏定义,所以keil编译器也就没有提醒什么错误,可想而知最后程序肯定不能正常运行,反复查了几次都没有找到错误的地方,心想写过好多次的简单的外设驱动竟然都有问题,突然有点开始怀疑人生了。 在ST的库函数中有个assert_param()参数检测,其实也就是个断言,这在其他的语言里也很常见,主要用于参数的检测。使用ST库函数的断言比较简单,首先打开断言的宏定义:这个宏一般会于stm32fxxx_conf.h中,不使用这个在其他地方定义一个也可以 其次是检测到参数错误时候的提交警告,这就要自己实现函数assert_failed(),提示的方法的比较简单,比如打印输出,LCD显示,蜂鸣器报警,while(1)函数死循环,我们这里选择将错误信息输出到串口: 当遇到参数错误时,串口会输出在那个文件的那一行,然后调试程序在那里设个断点基本就可以知道是那句代码触发了参数检测输出。 由于ST的库函数很多参数都是宏定义,而有些错误的参数和正确的参数都是差不多的宏定义,这样就可能导致即使参数错误也检测不到。所以说这个方法局限很大,最好的方法还是自己尽量不出错。 随便找个参数错误测试下,串口输出如下: 测试代码: |
【STM32F303开发】开发学习笔记、教程集合贴
【合集】STM32F303开发教程
【STM32F303开发】+ 使用片内的CCMRAM缩短代码执行时间
【STM32F303开发】(五)TIM定时器PWM的输出与捕获
【STM32F303开发】+ 内部Flash模拟EEPROM
【STM32F303开发】+如何解析GPS数据
【STM32F303开发】+使用fromelf反汇编keil生成的AXF文件
使用STM32F303VBT6的SPI驱动TM1629A
【STM32F303开发】+ 使用SWO输出调试信息到Debug Viewer窗口
【STM32F303开发】基础:工程模板+LED+USART+常用文档+按键中断
版主的意思是把这个宏USE_FULL_ASSERT定义在工程编译选项里面吗?
Just for fun !!
好久不见,忙啥呢,
搬家
感谢路过的