查看: 2128|回复: 4

[其他] 编译器优化造成复位

[复制链接]

该用户从未签到

4

主题

17

帖子

0

新手上路

Rank: 1

积分
46
最后登录
1970-1-1
发表于 2013-9-9 12:00:20 | 显示全部楼层 |阅读模式
SH32
 - CodeWarrior for MCU
     Version: 10.4
     Build Id:130425
 
简单演示
void report()
{
char buf[32];
Sprintf(buf,"This is a test :d% d%", var1, var2);
SciPuts(buf);
Sprintf(buf,"This is a test sdkjfsdflksd :d% d%", var3, var4);
SciPuts(buf);
}
优化选的默认S
因为定义了buf为32字节,所以要输出很多内容时就分了几次。
但是这个程序造成了非法指令复位,如果吧buf扩大到64字节,就不会出现复位。
分析原因。是因为编译器优化时,把两次输出合并到一起,把缓冲撑爆了。
moto/freescale作单片机这么多年了,我觉得这种低级错误不应该呀
 
第一次用freescale的CW,已经碰到两次编译器bug,真是头疼呀,现在项目还没完。
我知道答案 目前已有3人回答
回复

使用道具 举报

该用户从未签到

8

主题

299

帖子

0

高级会员

Rank: 4

积分
653
最后登录
2018-12-14
发表于 2013-9-9 15:24:37 | 显示全部楼层

回复:编译器优化造成复位

你用的什么芯片? 我试一下
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

17

帖子

0

新手上路

Rank: 1

积分
46
最后登录
1970-1-1
 楼主| 发表于 2013-9-12 08:09:21 | 显示全部楼层

RE:编译器优化造成复位

HCS08SH32
这个很麻烦,特别是要输出很多数据时
回复 支持 反对

使用道具 举报

该用户从未签到

8

主题

299

帖子

0

高级会员

Rank: 4

积分
653
最后登录
2018-12-14
发表于 2013-9-12 13:56:09 | 显示全部楼层

回复:编译器优化造成复位

8位机要尽量少用sprintf一类的库函数. 内存资源有限很容易会出现stack溢出.
建议你在prm文件中增大STACKSIZE的值试试
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

17

帖子

0

新手上路

Rank: 1

积分
46
最后登录
1970-1-1
 楼主| 发表于 2013-9-15 12:35:11 | 显示全部楼层

RE:编译器优化造成复位

这个和prm的stack无关,我已经设定为640了
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-9-9 16:42 , Processed in 0.091423 second(s), 25 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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