[求助]堆栈指针的初始化为什么不在RAM区最高地址
- UID
- 186569
- 性别
- 男
|
[求助]堆栈指针的初始化为什么不在RAM区最高地址
如题,一直很困惑,为什么CodeWarrior的C编译器生成的初始化代码将堆栈分配在全局变量和静态变量之后,而不将堆栈指针SP设为RAM空间的最高地址,或者稍微向下偏移一定的空间。最近一个程序就是因为堆栈空间分配的较小导致系统崩溃,所以提出这个想法,还望高手指点。 |
|
|
|
|
|
- UID
- 186569
- 性别
- 男
|
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
|
|
|
|
|
- UID
- 186569
- 性别
- 男
|
我知道可以通过改堆栈的大小空间,我想问的就是:如果直接把堆栈指针放在RAM区的最高的地址位置会有什么影响? |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
这当然也可以,而且CodeWarrior也有这样的伪指令。但是用这个方法后,编译器就不能计算你到底要多大的堆栈空间,也就无法提示是否有RAM与堆栈发生冲突的情况了。 |
|
|
|
|
|
- UID
- 186569
- 性别
- 男
|
谢谢,不过这样做你看一下行不行:其它的东西都不变,和以前默认的方式一样,在startup函数里对SP值的初始化进行修改,将其指定到RAM区的最高地址。这样的话可以保证编译器能够判断堆栈区与RAM是否有冲突,不知你的意思怎样。 |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
|
|
|
|
|