feitianhou 发表于 2007-8-6 09:01:31

atmega 128如何重新定义堆栈sp指针

我用的是两片32k外部ram准备扩充。这时我想把堆栈指针sp指向外部ram。不知如何操作

machao 发表于 2007-8-10 15:58:00

用汇编可以,用C比较困难。



1。C里面自动设置好了,除非你不用C自己的初始化代码,自己写。

2。AVR对外部RAM操作至少需要2个时钟周期,内部的RAM只要1个,将堆栈放在外部RAM,影响效率。所以一般多是将堆栈放在内部RAM中的。

feitianhou 发表于 2007-8-14 14:40:16

首先谢谢马老师的解答。如果我不管sp指针。让c自动处理。如果我的数据区把内部ram都占满了。那堆栈是不是会把我的数据区搞乱了呀

machao 发表于 2007-8-14 17:40:29

是的,所以大型数组最好采用指定位置的声明方式建立在外扩的RAM中,具体还要参考你所使用的开发平台。



AVR使用外部RAM看上去要比51复杂一些,51中有专门外部RAM变量的声明。但AVR是正路,与高端应用技术靠拢的。因此从这个意义上讲,在AVR上会使用C的人,其C的水平和或软件功底要比在51上使用C的人要求高,如要用到外部RAM的问题(非指一般基本的应用)。

feitianhou 发表于 2007-8-17 09:35:56

非常感谢马老师。 我以了解。我有两种解决方案:

1。在内部ram区多声明几个大的数组而我确不去使用它。目的在于将内部ram用没有实际意义的数据占满。这样我的堆栈在破坏内部数据时就不会破坏掉真正有用的数据了。

2。只能使用内存中的堆了。将堆定位到外部ram
页: [1]
查看完整版本: atmega 128如何重新定义堆栈sp指针