当前位置: 首页 > news >正文

STM32中assert_param的使用

在STM32的固件库和提供的例程中。到处都能够见到assert_param()的使用。

假设打开不论什么一个例程中的stm32f10x_conf.h文件,就能够看到实际上assert_param是一个宏定义;


在固件库中,它的作用就是检測传递给函数的參数是否是有效的參数。


所谓有效的參数是指满足规定范围的參数。比方某个參数的取值范围仅仅能是小于3的正整数,假设给出的參数大于3,
则这个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提前定义相应。

相关文章:

  • sass/scss 和 less的区别
  • c#时间格式
  • Kali Linux Wine32英文字体不显示问题
  • Redirect和Forward
  • Android View 事件分发机制 源代码解析 (上)
  • 配置maven
  • NumPy 中的线性代数
  • 服务注册发现consul之二:在Spring Cloud中使用Consul实现服务的注册和发现
  • 装修除甲醛,这些方法真有那么神奇吗?
  • 正则表达式之基本概念
  • 知识图谱构建_百度文库
  • MySQL--8MySQL存储过程小结
  • akka模块
  • Zico源代码分析:执行启动过程分析和总结
  • Xmanager 远程桌面 CentOS 7
  • Android组件 - 收藏集 - 掘金
  • Debian下无root权限使用Python访问Oracle
  • JS专题之继承
  • Vim Clutch | 面向脚踏板编程……
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • Vue 动态创建 component
  • Vue2 SSR 的优化之旅
  • 初识 beanstalkd
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 用mpvue开发微信小程序
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • #《AI中文版》V3 第 1 章 概述
  • (2)Java 简介
  • (3)(3.5) 遥测无线电区域条例
  • (3)llvm ir转换过程
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (二)springcloud实战之config配置中心
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (一)Dubbo快速入门、介绍、使用
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)C#调用WebService 基础
  • (转)jdk与jre的区别
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .考试倒计时43天!来提分啦!
  • @Autowired和@Resource的区别
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @RequestMapping用法详解
  • @RequestParam,@RequestBody和@PathVariable 区别
  • [100天算法】-实现 strStr()(day 52)
  • [1127]图形打印 sdutOJ
  • [20190401]关于semtimedop函数调用.txt
  • [Asp.net mvc]国际化
  • [AX]AX2012 SSRS报表Drill through action
  • [BUUCTF 2018]Online Tool(特详解)