本文共 1092 字,大约阅读时间需要 3 分钟。
在STM32的固件库和提供的例程中,到处都可以见到assert_param()的使用。如果打开任何一个例程中的stm32f10x_conf.h文件,就可以看到实际上assert_param是一个宏定义;这是一种常见的软件技术,可以在调试阶段帮助程序员快速地排除那些明显的错误。
它确实在程序的运行上牺牲了效率(但只是在调试阶段),但在项目的开发上却帮助你提高了效率。
当你的项目开发成功,使用release模式编译之后,或在stm32f10x_conf.h文件中注释掉对USE_FULL_ASSERT的宏定义,所有的assert_param()检验都消失了,不会影响最终程序的运行效率。 #define assert_param(expr) ((expr) ? (void)0 : assert_failed((u8 *)__FILE__, __LINE__)) 。。。 assert_param(IS_ADC_ALL_PERIPH(ADCx)); 。。。
在执行assert_param()的检验时,如果发现参数出错,它会调用函数assert_failed()向程序员报告错误,在任何一个例程中的main.c中都有这个函数的模板,如下:
void assert_failed(uint8_t* file, uint32_t line)
{while (1) {} }
你可以按照自己使用的环境需求,添加适当的语句输出错误的信息提示,或修改这个函数做出适当的错误处理。
1、STM32F10xD.LIB是DEBUG模式的库库文件。
2、STM32F10xR.LIB是Release模式的库库文件。 3、要选择DEBUG和RELEASE模式,需要修改stm32f10x_conf.h的内容。 #define DEBUG 表示DEBUG模式,把该语句注释掉,则为RELEASE模式。 4、要选择DEBUG和RELEASE模式,也可以在Options,C/C++,Define里填入DEBUG的预定义。 这样,就不需要修改stm32f10x_conf.h的内容。 5、如果把库加入项目,则不需要将ST的库源文件加入项目,比较方便。 但是,库的选择要和DEBUG预定义对应。转载地址:http://fhyni.baihongyu.com/