完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
在STM32的固件库和提供的例程中,到处都可以见到assert_param()的使用。比如下面的库函数:void GPIO_SetBits(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin){/* Check the parameters */assert_param(IS_GPIO_ALL_PERIPH(GPIOx));assert_param(IS_GPIO_PIN(GPIO_Pin));GPIOx->BSRR = GPIO_Pin;}在头文件stm32f10x_GPIO.h, 定义了宏:
#define IS_GPIO_ALL_PERIPH(PERIPH)(((PERIPH) == GPIOA) || / ((PERIPH)== GPIOB) || / ((PERIPH)== GPIOC) || / ((PERIPH)== GPIOD) || / ((PERIPH)== GPIOF)) 就可以看到实际上assert_param是一个宏定义,它的作用就是检测传递给函数的参数是否是有效的参数。所谓有效的参数是指满足规定范围的参数,比如某个参数的取值范围只能是GPIOA,GPIOB, GPIOC,GPIOD,GPIOF这5个,如果给出的参数不在这个范围, 则这个assert_param()可以在运行的程序调用到这个函数时报告错误,使程序员可以及时发现错误,而不必等到程序运行结果的错误而大费周折。 这是一种常见的软件技术,可以在调试阶段帮助程序员快速地排除那些明显的错误。它确实在程序的运行上牺牲了效率(但只是在调试阶段),但在项目的开发上却帮助你提高了效率。 当你的项目开发成功,使用release模式编译之后,或在stm32f10x_gpio.h文件中注释掉宏定义,所有的assert_param()检验都消失了,不会影响最终程序的运行效率。 你可以按照自己使用的环境需求,添加适当的语句输出错误的信息提示,或修改这个函数做出适当的错误处理。如果发现参数出错,它会调用函数assert_failed()向程序员报告错误,在任何一个例程中的main.c中都有这个函数的模板,如下:void assert_failed(uint8_t* file,uint32_t line) {while (1){}} 你可以按照自己使用的环境需求,添加适当的语句输出错误的信息提示,或修改这个函数做出适当的错误处理。 |
|
|
|
只有小组成员才能发言,加入小组>>
923 浏览 1 评论
1082 浏览 1 评论
12505 浏览 0 评论
5921 浏览 3 评论
17714 浏览 6 评论
1020浏览 1评论
1011浏览 1评论
924浏览 1评论
4615浏览 1评论
1082浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 15:44 , Processed in 0.829909 second(s), Total 49, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号