Board logo

标题: start08.c里面初始化了sp,请问如何修改“__SEG_END_SSTACK”和长度 [打印本页]

作者: 烈火旋灯    时间: 2005-4-27 16:22     标题: start08.c里面初始化了sp,请问如何修改“__SEG_END_SSTACK”和长度

请问如何修改“__SEG_END_SSTACK”和长度
作者: seuafu2005    时间: 2005-4-27 16:46

start08.c里面好象没有__SEG_END_SSTACK?
start08.c是Codewarrior的初始化文件,为什么要去修改?
你如果需要修改堆栈段和堆栈的长度的话可以在prm文件里面定义
作者: 烈火旋灯    时间: 2005-4-27 16:58

谢谢!如何定义,请指教,我只看到了STACKSIZE,这个只能改长度,但是sp首地址如何改
作者: strongchen    时间: 2005-4-28 10:23

SP的首地址可以在用户主程序的初始化部分设置。
作者: 烈火旋灯    时间: 2005-4-28 21:26

strongchen:请问,如何初始化,用哪个语句,比如我要实现0X50——>SP,在C里如何操作,请正面回答我好吗!求你了,大哥


[此贴子已经被作者于2005-4-28 21:26:07编辑过]


作者: 8808beter    时间: 2005-4-29 08:56

SP的起始地址其实是PRM中定义的RAM(非零页地址)起始地址。它的运做是这样的。
在RAM开始的是你定义在其中的变量,变量是自动从最小地址排列到最大地址的,当然你也可以随意定义变量的物理地址(用@0x00??H),SP是从变量占用的最大地址开始计算,长度是由STACKSIZE指定。
所以如果你要改变SP的起始地址,可以将变量另定义一个区(不用DEFAULT RAM就行了),这样就可以了。即将默认变量、零页变量、SP分开定义到不同的地址区间就OK。
作者: 烈火旋灯    时间: 2005-4-29 13:58

明白,非常感谢!
作者: kaxinuo    时间: 2007-10-18 19:58

兄弟:能给我发个例子嘛??jimiko@tom.com

具体怎么分开啊!
作者: strongchen    时间: 2007-10-19 10:28

RAM分成零页和非零页两块。如果不加说明,CodeWarrior的编译器会把全局变量都放入非零页中,因为它是DEFAULT_RAM(见PRM文件中)。堆栈也是放在非零页中的,紧跟在最后一个变量地址之后。如果要将变量放入零页地址,可以加上这样一句声明:

#pragma DATA_SEG MY_ZEROPAGE

其中MY_ZEROPAGE也是在PRM文件中定义的零页地址区。你可以看我上传的例子,在这个例子中,Ram_01放在零页中,而Ram_02放在非零页中。而且堆栈的大小也改为了0x60。

http://bbs.chinaecnet.com/uploadImages/gp32test.rar
作者: xingku77    时间: 2008-5-24 13:39

请问更改sp的长度和首地址有什么用途???????????请给予解答

作者: strongchen    时间: 2008-5-26 10:47

SP的首地址是必须初时化的,因为复位缺省值可能并不是你所要的值。设置SP的长度可以让编译器知道你需要多大的SP空间,是否有足够的空间。




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