zhou_xiaojun 发表于 2009-11-17 16:53:04

请教关于NEC堆栈的相关问题

我用的是NEC的78F0503。想问下堆栈的起始地址是多少?最大是多少?可以设置吗?在内存中堆栈是不是不能分配在SADDR区?

jdjsxf 发表于 2009-11-18 09:12:40

1、编译器根据你的程序设置情况有一个默认值。
2、最大就是internal high speed RAM的大小,但这个一般不可能,因为总要有一些变量吧。
3、可以设置,但建议不设置,目前编译器会把变量使用之外的RAM都分给堆栈,所以是可用的最大的堆栈。
4、可以。不过为了简单起见,你可以把变量放在SADDR区域,这样也能给堆栈多一些空间。

zhou_xiaojun 发表于 2009-11-18 17:36:39

我可以查询堆栈的起始地址是多少吗?怎么查?还有,你说internal high speed RAM除了定义的一些变量其他都给了堆栈,但是在MAP文件中没有用完的一般RAM和没有用完的SADDR的内存不是连续的,怎么能够给堆栈呢?是不是只是一般RAM中没用完的部分才给了堆栈,但是手册上也说了堆栈可以使用SADDR区啊!
感觉NEC的堆栈搞的好模糊啊!其他单片机在堆栈这方面都很清晰啊!请高手指教!

jdjsxf 发表于 2009-11-19 09:15:31

在你的工程里有个文件的后缀名是.sym,里面好像有两个变好STBNG,STEND,没记错的话是叫这两个名字,后面的数对应的是堆栈的起始和结束地址。
默认情况下SADDR区域好像不会给堆栈。
没有用完的一般RAM就是默认情况下的堆栈大小。
我上面说了,干吗非要把堆栈放到SADDR区呢,你把变量尽量放在SADDR不是挺好吗。当然,或许你有特殊的用法。
如果你非要改的话,可以用修改链接文件等方法。
具体的使用你还是咨询NEC吧。他们的手册太多,我记不清了。

感觉NEC在工具这方面是试图作的“傻瓜化”一些,所以在工程表面不能很明显看出如何修改。
其它的单片机由于很多配置需要自己修改,所以给得很详细。
我觉得这是习惯,一开始我也不习惯。

zhou_xiaojun 发表于 2009-11-20 09:27:13

谢谢!我已经知道了!

RENESAS-etouch 发表于 2009-11-23 21:28:57

搂主的问题是这样的,请查阅你的项目文件夹里面以*.sym的文件,里面有个两个段名,stbeg和stend对应的地址分别表示堆栈的起始地址和结束地址。变量和堆栈是对开的,RAM是从高地址向下走,堆栈是从低地址向上走,如果在运行时出现交会就会有问题,所以变量和临时变量等占用的ram空间剩下的下面的空间就是stack 空间。
页: [1]
查看完整版本: 请教关于NEC堆栈的相关问题