野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13213|回复: 5

火哥火哥,stm32固件库居然。。。

[复制链接]
发表于 2016-9-3 11:58:22 | 显示全部楼层 |阅读模式
默认关闭了断言,我也是醉了,刚好看到火哥I2C的视频,发现断言函数接口的define是关闭的,那他还写一个 assert_param(IS_I2C_ALL_PERIPH(I2Cx));这种来忽悠我。不过有一点没明白,还请火哥解惑。
assert_failed((uint8_t *)__FILE__, __LINE__);这个和C中的断言函数不一样当然也不能goto过去看内部,我想问,这个断言是stm32编译器就实现了的还是怎么的?
回复

使用道具 举报

发表于 2016-9-3 12:02:18 | 显示全部楼层
其实就是一个函数,你可以把宏代进assert_param看看,程序运行的时候,把参数输入到判断条件,检测是否为真,假的话就调用assert faield,它不是编译器实现的,本质来说也是一个普通函数,在芯片运行时调用执行

至于 __FILE__ __LINE__是c语言里特殊的标号,你可以百度下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-3 12:07:29 | 显示全部楼层
flyleaf 发表于 2016-9-3 12:02
其实就是一个函数,你可以把宏代进assert_param看看,程序运行的时候,把参数输入到判断条件,检测是否为真 ...

恩,谢谢解答,也测试过了,在c中会提示文件和行号,但是__FILE__这个是在哪里定义的呢?并没有包涵标准c头文件呀。
回复 支持 反对

使用道具 举报

发表于 2016-9-3 14:02:09 | 显示全部楼层
Yang_Guang 发表于 2016-9-3 12:07
恩,谢谢解答,也测试过了,在c中会提示文件和行号,但是__FILE__这个是在哪里定义的呢?并没有包涵标准c ...

这应该算是关键字语法吧,不是宏来的,就像if while一样
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-3 14:43:11 | 显示全部楼层
flyleaf 发表于 2016-9-3 14:02
这应该算是关键字语法吧,不是宏来的,就像if while一样

查了下博客,博主这样贴的
编译器内置宏:

先介绍几个编译器内置的宏定义,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息。

ANSI C标准中有几个标准预定义宏(也是常用的):

__LINE__:在源代码中插入当前源代码行号;

__FILE__:在源文件中插入当前源文件名;

__DATE__:在源文件中插入当前的编译日期

__TIME__:在源文件中插入当前编译时间;

__STDC__:当要求程序严格遵循ANSI C标准时该标识被赋值为1;

__cplusplus:当编写C++程序时该标识符被定义。
回复 支持 反对

使用道具 举报

发表于 2016-9-3 17:45:38 | 显示全部楼层
Yang_Guang 发表于 2016-9-3 14:43
查了下博客,博主这样贴的
编译器内置宏:

原来是内置宏啊,那也算是宏
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-22 08:34 , Processed in 0.038282 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表