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

所谓有效的参数是指满足规定范围的参数,比如某个参数的取值范围只能是小于3的正整数,如果给出的参数大于3,则这个assert_param()可以在运行的程序调用到这个函数时报告错误,使程序员可以及时发现错误,而不必等到程序运行结果的错误而大费周折。这是一种常见的软件技术,可以在调试阶段帮助程序员快速地排除那些明显的错误。

它确实在程序的运行上牺牲了效率(但只是在调试阶段),但在项目的开发上却帮助你提高了效率。当你的项目开发成功,使用release模式编译之后,或在stm32f10x_conf.h文件中注释掉对USE_FULL_ASSERT的宏定义,所有的assert_param()检验都消失了,不会影响最终程序的运行效率。

要选择DEBUG和RELEASE模式,需要修改stm32f10x_conf.h的内容。#define DEBUG 表示DEBUG模式,把该语句注释掉,则为RELEASE模式。也可以在Options,C/C++,Define里填入DEBUG的预定义。这样,就不需要修改stm32f10x_conf.h的内容。如果把库加入项目,则不需要将ST的库源文件加入项目,比较方便。但是,库的选择要和DEBUG预定义对应。

转载于:https://www.cnblogs.com/Lifescoding/p/4224111.html

STM32中assert_param的使用相关推荐

  1. STM32中C语言知识点:初学者必看,老鸟复习(长文总结)

    说在前面的话 一位初学单片机的小伙伴让我推荐C语言书籍,因为C语言基础比较差,想把C语言重新学一遍,再去学单片机,我以前刚学单片机的时候也有这样子的想法. 其实C语言是可以边学单片机边学的,学单片机的 ...

  2. STM32中TIM_ClearFlag和TIM_ClearITPendingBit有什么区别

    STM32中TIM_ClearFlag和TIM_ClearITPendingBit有什么区别 /*** @brief Clears the TIMx's pending flags.* @param ...

  3. STM32中GPIO的8种工作模式

    一.推挽输出:可以输出高.低电平,连接数字器件:推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止.高低电平由IC的电源决定.形象点解释:推挽,就是有推有拉,任何 ...

  4. Arduino处理STM32中的多个串口通讯问题

    简 介: 对于在Arduino下开发STM32的程序,对于STM32所具有的三个硬件USART进行测测试.结果显示可以使用这些串口完成相应的数据的输入与输出.但是涉及到以下两个问题,还没有得到解决:问 ...

  5. STM32中GPIO的8种工作模式!

    一.推挽输出:可以输出高.低电平,连接数字器件:推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止.高低电平由IC的电源决定.         推挽电路是两个参数 ...

  6. STM32中IO口的8中工作模式

    该文摘自:http://blog.csdn.net/kevinhg/article/details/17490273 一.推挽输出:可以输出高.低电平,连接数字器件:推挽结构一般是指两个三极管分别受两 ...

  7. STM32中GPIO的8种模式

    STM32中GPIO的8种模式

  8. STM32中NVIC_SystemReset()函数的作用?什么时候用?

    STM32中NVIC_SystemReset()函数的作用?什么时候用? STM32软件复位有两种方式 (1)方式一:NVIC_SystemReset()函数用来复位STM32. 注意1:从SYSRE ...

  9. STM32中的timers中断处理函数

    STM32中的timers中断处理函数 1.在固件库函数里面,用来读取中断状态寄存器的值判断中断类型的函数是: ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, ...

  10. 9.STM32中对SysTick_Init()函数(sysTick_Config()、TimingDelay_Decrement()自定义)和Delay_us()的理解

    STM32中对SysTick_Init()函数(sysTick_Config().TimingDelay_Decrement()自定义)和Delay_us()的理解: 实验:3个LED灯以500ms的 ...

最新文章

  1. #error使用分析
  2. MySQL中的索引(唯一索引篇)
  3. JZOJ 5068. 【GDSOI2017第二轮模拟】树
  4. Android Studio添加aar
  5. html5中在canvas上绘图
  6. 优化android studio编译的apk大小
  7. 支付宝五福又来了,但已没人关心抢红包
  8. 看到这个密码,我就笑了
  9. 教你编写第一个人工智能程序
  10. 工作薄与工作表的区别:
  11. 丢失数据文件和控制文件的恢复案例(zt)
  12. 4、Android下实现Google街景
  13. 泰拉瑞亚服务器云存档文件夹,泰拉瑞亚助手常见问题 存档等问题解决方法
  14. php程序员就业方向,php程序员发展方向_php程序员有前途吗
  15. Python print连续输出不换行
  16. python计算机视觉学习———图像分割
  17. 2012最新网络电台mms地址
  18. Spring Boot 修改tomcat端口
  19. Java小项目-银行用户管理系统
  20. jenkins内部分享ppt

热门文章

  1. nginx 正则 结尾 配置_nginx配置proxy_pass中url末尾带/与不带/的区别详解
  2. 基于python的毕业论文邮箱收发系统_基于Python实现邮件发送
  3. c语言单例模式,C语言之单例模式
  4. Linux卸载系统盘,Linux磁盘管理(创建、卸载、挂载磁盘)
  5. 容器技术Docker K8s 4 容器编排技术基础-Kubernetes
  6. 收到控制台警告:当我在iOS13.2中加载WKWebView时,[Process] kill() returned unexpected error 1
  7. 命令行Terminal增加proxy开关
  8. 极客大学架构师训练营 系统架构 高并发 高可用 垂直伸缩 水平伸缩 第7课 听课总结
  9. php 查询逗号分隔字符串,PHP-在逗号分隔的字符串mysql中查找值
  10. php mysql 1040_php – 如何修复消息:SQLSTATE [08004] [1040]连接太多