[STM8] STM8S编译器assert_failed未定义问题 的解决过程

[复制链接]
4079|6
 楼主| Fannymini 发表于 2015-1-14 11:03 | 显示全部楼层 |阅读模式
本帖最后由 Fannymini 于 2015-1-14 11:10 编辑

今天准备做第七章的程序。第七章的程序都想用库函数来完成。
用最新版本的库函数,建立工程,不想遇到点小问题。在此记录下。
新建工程后,工程中会有默认的MAIN.C文件。把需要的库函数文件加进去之后,尤其是.C文件,编译就不能过。提示assert_failed找不到定义。
后来就打开早期版本,用库函数写好的工程,查找此函数的定义在何处。发现以前版本同现在的版本有所不同。
没办法,只有打一官方库函数的参考工程文件。官方的工程文件,定义了好多不同CPU。打开当前需要的CPU:STM8S903K3,点开MAIN.C文件,发现MAIN.C文件中最后一段有以下定义:
#ifdef USE_FULL_ASSERT

void assert_failed(u8* file, u32 line)
{


  while (1)
   {
   }
}
#endif

呵呵,结合STM8S_CONF.H文件的USE_FULL_ASSERT定义,发现这段语句是需要加进自己主函数MAIHN.C当中的。
最后加进去,再编译就OK了。
在此提供需要的人,如果用库函数时出现assert_failed定义问题,可像以上方法解决。
aozima 发表于 2015-1-14 11:49 | 显示全部楼层
STM8的ROM小,量产时可以考虑关闭这个功能以省空间。

评分

参与人数 1威望 +1 收起 理由
Fannymini + 1 赞一个!

查看全部评分

 楼主| Fannymini 发表于 2015-1-14 16:24 | 显示全部楼层
谢谢分享,受教了!
 楼主| Fannymini 发表于 2015-1-14 16:25 | 显示全部楼层
aozima 发表于 2015-1-14 11:49
STM8的ROM小,量产时可以考虑关闭这个功能以省空间。

:)谢谢您的建议!
mmuuss586 发表于 2015-1-14 18:54 | 显示全部楼层

看看2个工程的设置是否一样;
可能需要定义下,或者缺少文件;

评分

参与人数 1威望 +1 收起 理由
Fannymini + 1 赞一个!

查看全部评分

泰山特曲123 发表于 2015-1-14 22:27 来自手机 | 显示全部楼层
aozima 发表于 2015-1-14 11:49
STM8的ROM小,量产时可以考虑关闭这个功能以省空间。

这本来就是一个断言,只在调试时使用,发布版就没有断言

评分

参与人数 1威望 +1 收起 理由
Fannymini + 1 赞一个!

查看全部评分

cupid2372417100 发表于 2017-5-25 17:42 | 显示全部楼层
aozima 发表于 2015-1-14 11:49
STM8的ROM小,量产时可以考虑关闭这个功能以省空间。

你好,怎样才能关闭这个功能啊?
因为我看有些main.c使用了库函数,没有加最后这段语句也没有报错,但不知道怎么做到的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

162

帖子

7

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