打印

断言机制问题

[复制链接]
2461|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lanseshuijing|  楼主 | 2012-12-20 11:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
lanseshuijing|  楼主 | 2012-12-20 11:16 | 只看该作者
本帖最后由 lanseshuijing 于 2012-12-20 11:22 编辑

assert_param(0);//我直接赋值为0使条件不成立


#define USE_FULL_ASSERT    1

#ifdef  USE_FULL_ASSERT

#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
  void assert_failed(uint8_t* file, uint32_t line);
#else
  #define assert_param(expr) ((void)0)
#endif /* USE_FULL_ASSERT */
#endif /* __STM32F0XX_CONF_H */


编译的时候不会报告错误提示

使用特权

评论回复
板凳
john_lee| | 2012-12-20 12:02 | 只看该作者
楼主,断言(assert)机制是运行时才起作用的。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
原野之狼 + 2 正解
地板
lanseshuijing|  楼主 | 2012-12-20 13:40 | 只看该作者
john_lee 发表于 2012-12-20 12:02
楼主,断言(assert)机制是运行时才起作用的。

系统运行起来他会怎么提示设置的参数错误啊,我还是不明白,可以详细点解释一下吗

使用特权

评论回复
5
john_lee| | 2012-12-20 14:39 | 只看该作者
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
你给了个0参数,显然会直接编译为assert_failed((uint8_t *)__FILE__, __LINE__))。就是去调用assert_failed函数。
而assert_failed函数是根据平台的不同而有不同的实现:
1、最后调用 exit 或 abort 函数,或干脆就死循环,前面部分交给用户补充实现。
2、向系统控制台(console)输出(使用 printf 等等),然后 exit, abort 等等。这个方法可能需要用户实现具体的输出定向。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
lanseshuijing + 2 明白了
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

93

主题

749

帖子

4

粉丝