打印
[STM8]

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

[复制链接]
3306|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小,量产时可以考虑关闭这个功能以省空间。

:)谢谢您的建议!

使用特权

评论回复
5
mmuuss586| | 2015-1-14 18:54 | 只看该作者

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

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
Fannymini + 1 赞一个!
6
泰山特曲123| | 2015-1-14 22:27 | 只看该作者
aozima 发表于 2015-1-14 11:49
STM8的ROM小,量产时可以考虑关闭这个功能以省空间。

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

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
Fannymini + 1 赞一个!
7
cupid2372417100| | 2017-5-25 17:42 | 只看该作者
aozima 发表于 2015-1-14 11:49
STM8的ROM小,量产时可以考虑关闭这个功能以省空间。

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

162

帖子

7

粉丝