ASSERT(断言)的作用

这段文字借鉴了Hans.Cai的原文(https://www.cnblogs.com/caihongsheng/p/3514523.html):

程序一般分为Debug 版本和Release 版本,Debug 版本用于内部调试,Release 版本发行给用户使用。

  assert(断言)的作用:

       ①首先,断言assert 是仅在Debug 版本起作用的宏,

       ②用于检查“不应该”发生的情况。在运行过程中,如果assert 的参数为假,那么程序就会中止(一般还会出现提示对话,说明在什么地方引发了assert)。

用法说明:  

  在STM32的固件库和提供的例程中,到处都可以见到assert_param()的使用。如果打开任何一个例程中的stm32f10x_conf.h文件,就可以看到实际上assert_param是一个宏定义;在固件库中,它的作用就是检测传递给函数的参数是否是有效的参数。

  所谓有效的参数是指满足规定范围的参数,比如某个参数的取值范围只能是小于3的正整数,如果给出的参数大于3,则这个assert_param()可以在运行的程序调用到这个函数时报告错误,使程序员可以及时发现错误,而不必等到程序运行结果的错误而大费周折。

  这是一种常见的软件技术,可以在调试阶段帮助程序员快速地排除那些明显的错误。它确实在程序的运行上牺牲了效率(但只是在调试阶段),但在项目的开发上却帮助你提高了效率。

  当你的项目开发成功,使用release模式编译之后,或在stm32f10x_conf.h文件中注释掉对USE_FULL_ASSERT的宏定义,所有的assert_param()检验都消失了,不会影响最终程序的运行效率。

  在执行assert_param()的检验时,如果发现参数出错,它会调用函数assert_failed()向程序员报告错误,在任何一个例程中的main.c中都有这个函数的模板,如下:

 1 #ifdef  USE_FULL_ASSERT
 2 /**
 3   * @brief  Reports the name of the source file and the source line number
 4   *         where the assert_param error has occurred.
 5   * @param  file: pointer to the source file name
 6   * @param  line: assert_param error line source number
 7   * @retval None
 8   */
 9 void assert_failed(uint8_t *file, uint32_t line)
10 { 
11   /* USER CODE BEGIN */
12   /* User can add his own implementation to report the file name and line number,
13      tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
14   /* USER CODE END */
15 }
16 #endif /* USE_FULL_ASSERT */

用户可以按照自己使用的环境需求,添加语句输出错误的信息提示,或修改这个函数做出错误处理。

转载于:https://www.cnblogs.com/better-day/p/11430418.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值