打印

为何会在MDK的printf中跑飞

[复制链接]
4817|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ilcvm|  楼主 | 2009-12-24 10:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
近段时间在用ARM7 STR751碰上很莫名其妙的问题,搞了几天也查不出问题所在,望众高手指点指点

那段程序本来运行正常的,后来为配合新加入独立于这程序BOOTLOADER,起始地址后移32K(0x20000000->0x20008000),中断表拷到内存起始区然后在REMAP到RAM。程序启动正常,中断进入正常,但程序跑着跑着就飞。而且飞得很没规律,一直无法跟踪到出错语句。后来发现一旦把所有printf都取消掉,程序就不再飞了。最让我费解的是起始位置还原到0x20000000问题就消失,尽管依然REMAP到RAM。

为进一步确定问题所在,我想尽量让错误稳定出现,就把中断都关掉,只保留一处用printf的地方直接写UART发送寄存器发个字符出来,但依然飞得很没规律。一般是在某句printf开始的时候飞的(printf前的字符已收到),很偶尔的情况在中间飞(字符串只发到一半)。而更好笑的是仿真时如果我在库代码里printf函数的入口加个断点,就基本没飞过了,断点一DISABLE就没printf几次就飞了。

为了试出最简出错环境,我在进入主循环前加了死循环,就是不停地printf一些字符串和变量,但无论是否关中断就他妈的不飞。

这些情况搞得我好郁闷,如果是MDK的RVCT自带的C库有BUG,那每次跑飞的位置应该一样才对啊,IRQ都被我关掉了,而且为了环境尽可能一致我在启动代码加了段把所有RAM都清零的语句。最想不通就是程序放到0x20000000就啥问题都没有。

后来把初始化程序改了一下,加入REMAP代码并把向量表都拷到RAM区。也就是程序在进入C库初始化前已经完成REMAP的所有工作。但问题依旧。

这时把*.o (RESET, +First)(包括向量表和各个中断响应初始化程序)加载到0x20000000,其余代码加载到0x20008000,也就是说初始化代码,所有C库代码和其他代码都在这区里面。测试问题消失。

两次实验区别应该只有如下几点:
1. 前者运行前执行了32K的0x0代码。
2. 前者中断响应初始化程序(75x_vect.s里的代码)在0x20008000区内运行。
3. 前者在0x20008000区的代码加载位置整体后移了约1.5K。

大家认为问题有最可能出在哪呢?谢谢。

相关帖子

沙发
xinzha| | 2009-12-24 10:49 | 只看该作者
最好能把你的scatter文件和init.s(或者是startup.s)发出来看看

使用特权

评论回复
板凳
ilcvm|  楼主 | 2009-12-24 11:43 | 只看该作者
好的,附近里面是目前我用的启动文件和分散加载脚本文件

RVCT.zip

7.57 KB

使用特权

评论回复
地板
xinzha| | 2009-12-24 15:11 | 只看该作者
根据LZ的描述,个人感觉像是Heap或者Stack出了问题,stack的可能性更大。
你在硬件不改的基础上只是将入口后移,这无形中就相当于你的ram少了32K,可能stack的空间被挤没了。
当你用while(1)来测试printf的时候,while(1)后面的代码可能已经不被编译连接(如果你打开了编译优化),所以空间问题消失。
没有用过STR751,等晚上找到资料再跟LZ学习。

使用特权

评论回复
5
ilcvm|  楼主 | 2009-12-24 16:51 | 只看该作者
RAM没有少那么多,只少了192个字节用来放中断向量而已。后移的是FLASH地址,也就是FLASH少了32K。
我开始也觉得是STACK问题,但我试过把STACK的大小增加一倍到2k也没有效果。而且我觉得我关了中断后,就基本没有外部输入量(信号检测接收都在中断完成),但跑飞位置依然是随机的。

使用特权

评论回复
6
liuwei0908| | 2009-12-27 00:12 | 只看该作者
printf会占用大量的stack,

使用特权

评论回复
7
flyingpig4945| | 2012-4-7 00:18 | 只看该作者
楼主搞定了没有?

使用特权

评论回复
8
wandersky| | 2013-11-29 08:37 | 只看该作者
我也遇到这样的问题了

使用特权

评论回复
9
wandersky| | 2013-11-29 08:38 | 只看该作者
我是在LPC2294上遇到的

使用特权

评论回复
10
天命风流| | 2013-11-29 08:43 | 只看该作者
路过!!!                    

使用特权

评论回复
11
zchong| | 2013-11-29 11:44 | 只看该作者
选择microlib

使用特权

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

本版积分规则

1

主题

3

帖子

1

粉丝