断言机制问题

[复制链接]
2736|4
 楼主| lanseshuijing 发表于 2012-12-20 11:01 | 显示全部楼层 |阅读模式
本帖最后由 lanseshuijing 于 2012-12-20 11:15 编辑

我用keil mdk 软件,编译ram软件,其中的断言机制编译的时候不提示错误信息,不知道是怎么回事,



 楼主| 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)机制是运行时才起作用的。

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

粉丝
快速回复 在线客服 返回列表 返回顶部