Board logo

标题: [求助]堆栈指针的初始化为什么不在RAM区最高地址 [打印本页]

作者: shengds    时间: 2009-6-24 10:17     标题: [求助]堆栈指针的初始化为什么不在RAM区最高地址

如题,一直很困惑,为什么CodeWarrior的C编译器生成的初始化代码将堆栈分配在全局变量和静态变量之后,而不将堆栈指针SP设为RAM空间的最高地址,或者稍微向下偏移一定的空间。最近一个程序就是因为堆栈空间分配的较小导致系统崩溃,所以提出这个想法,还望高手指点。
作者: shengds    时间: 2009-6-25 15:46

自己支持一下,拜托


作者: strongchen    时间: 2009-6-26 11:20

你可以将堆栈空间改大呀。
作者: shengds    时间: 2009-6-26 14:47

我知道可以通过改堆栈的大小空间,我想问的就是:如果直接把堆栈指针放在RAM区的最高的地址位置会有什么影响?


作者: strongchen    时间: 2009-6-29 15:31

这当然也可以,而且CodeWarrior也有这样的伪指令。但是用这个方法后,编译器就不能计算你到底要多大的堆栈空间,也就无法提示是否有RAM与堆栈发生冲突的情况了。
作者: shengds    时间: 2009-7-3 10:21

谢谢,不过这样做你看一下行不行:其它的东西都不变,和以前默认的方式一样,在startup函数里对SP值的初始化进行修改,将其指定到RAM区的最高地址。这样的话可以保证编译器能够判断堆栈区与RAM是否有冲突,不知你的意思怎样。
作者: strongchen    时间: 2009-7-3 16:50

可以一试。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0