在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提前定义相应。

最新文章

  1. 安卓Design之NavigationView的使用
  2. hdu5714 拍照[2016百度之星复赛C题]
  3. 错误: java.lang.reflect.InvocationTargetException
  4. WOFF mime类型
  5. 《SQL Server企业级平台管理实践》读书笔记——SQL Server中关于系统库Tempdb总结
  6. ubuntu14.04安装dropbox
  7. PHP生成token防止表单重复提交
  8. oracle 回收站管理
  9. 又是一道水题 hdu背包
  10. java_method_Log输出日志的方法
  11. JavaScript学习笔记(二)原型
  12. 编辑控件CKEditor和CKFinder
  13. SqlServer批量导入
  14. 【NOIP】OpenJudge - 15-03:雇佣兵
  15. bat获取系统时间修改系统密码
  16. 彻底解决Yii2中网页刷新时验证码不刷新的问题
  17. 字体反爬--css+svg反爬
  18. JMeter学习(十一)WebSerivice测试计划(转载)
  19. linux下实时查看log
  20. Python--进阶处理8

热门文章

  1. JavaScript实现html页面转换成图片格式
  2. ORA-01795: 列表中的最大表达式数为 1000
  3. [AngularJS]Chapter 3 使用AngularJS构建应用程序
  4. 字符串中连续出现最多的子串 & 字符串中最长反复子串
  5. 国家人工智能(AI)的美好前景
  6. 基础数位DP小结
  7. 英语影视台词---七、THE GREAT GATSBY QUOTES
  8. nyoj--233--Sort it (水题)
  9. 17.广度优先遍历bfs
  10. UISrcoll控件简单介绍