打印
[AVR单片机]

请教AVR寄存器的问题!

[复制链接]
3147|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zztchan|  楼主 | 2007-4-6 09:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近看了沈文编著的AVR单片机C语言开发入门指导,对其中的寄存器分配部分不甚理解。
问题一:书中提到了SRAM的动态分配内存区域和软件堆栈可能存在着冲突的问题。我实际作了些小试验,发现,如果定义了很多局部变量,如果在工作寄存器中无法全部存放,就会存放在软件堆栈中,如硬件堆栈采用默认的16字节,则从0x10EE(0x10EF存放的是0xAA警戒线)开始向低地址存放,而所谓动态分配内存区好像一直没使用阿,也就不存在软件堆栈和动态分配区冲突的问题了,而只是和bss区冲突,实际上reset也只是在硬件堆栈和bbs区的尾部放了0xAA作为警戒线。这样我就不知道所谓的动态分配内存区域到底用来作什么?
问题二:flash中的idata由编译器(我们采用ICCAVR6.31A)完成,但是不知道为什么我们的程序中编译器分配这个区域时中间空出很大一片区域,而并不全是紧密排列,这样就导致其复制到SRAM的data区中后浪费了很大一块区域。
问题三:不知道func_lit这个区域放的函数入口地址作什么用的?

希望作者或者广大热心的网友能够指教。

相关帖子

沙发
zztchan|  楼主 | 2007-4-6 11:14 | 只看该作者

怎么没人回答啊!

书上说不是在这里问问题吗?

使用特权

评论回复
板凳
zztchan|  楼主 | 2007-4-6 11:52 | 只看该作者

还是没人回答啊!

55555555555

使用特权

评论回复
地板
zztchan|  楼主 | 2007-4-13 15:12 | 只看该作者

怎么没人回答!!

都过了这些天了!造业啊!

使用特权

评论回复
5
Loo_jack| | 2007-4-14 10:41 | 只看该作者

这个不是一个初学者应该关心的

你还刚刚看书就要人家给你讲解这些,人家怎么回答,说简单一点,这些工夫都有编译器给你完成,不需要你关心,说复杂一点要给你讲20堂理论课,人家没这个心情。
当你对单片机编程达到一定高度以后,这些自然而然就知道了

使用特权

评论回复
6
zztchan|  楼主 | 2007-4-17 10:01 | 只看该作者

楼上的

楼上说的不对!
我们是遇到了堆栈的问题,才促使我去研究这些问题的,而且已经基本明白了,现在的问题也很简单了,怎么需要20节课呢?你要是明白就请直接告诉,不明白就不要在这里胡说。

使用特权

评论回复
7
zztchan|  楼主 | 2007-4-17 10:07 | 只看该作者

最烦装牛b的人

好像版面上都是高手似的,不屑于回答我的问题?高手们都在研究什么问题呢?

使用特权

评论回复
8
zztchan|  楼主 | 2007-4-17 13:25 | 只看该作者

谢谢楼上

不知道编译器中哪里可以设置?也不知道编译器不连续分配地址的用意是什么。

使用特权

评论回复
9
Loo_jack| | 2007-4-17 15:49 | 只看该作者

好人难做

这年头好人真的难做。我虽然不是高手,也不喜欢装。
写程序也有一段时间了,写的程序行数也是w为单位的,但几乎从没遇到过要去关心楼主所说的东西,底下爱怎么排列就怎么排列,上面关心的是够不够用,能不能用,要不拿编译器干什么用?如果你真到了要去设置这些的层次,你自然就知道怎么去设置了。一句话,不就是 一个存储空间吗?

使用特权

评论回复
10
zztchan|  楼主 | 2007-4-19 14:19 | 只看该作者

原来你也不懂啊!

你不关心不代表他不重要啊,我们的ram不够用了我自然要去分析一下,中间浪费了1k的区域,怎么就不值得关心呢。
我相信我搞AVR的时间也不算短了,但是对它的了解20%都不敢说,不涉及的问题我也不会去管。
就好比现在弄清楚了软件堆栈硬件堆栈的分配问题,以后就会有针对的避免出现堆栈的溢出的错误。
几w行程序很多吗?我们的产品上一个显示通讯终端的代码就有1w多行。请楼上的同志不要一副自以为是的样子。

使用特权

评论回复
11
坏孩子| | 2007-4-19 19:30 | 只看该作者

ICC的help文档中有详细的说明……

所谓动态内存分配区域,是留给malloc这样的函数使用的。
这些函数在使用前必须通过NewHeap()函数初始化。
软件堆栈中空白部分有它存在的必要,因为,软件堆栈主要用于存储函数局部变量,局部变量在进入函数的时候被分配到这一区域,当函数推出时这些被占用的空间会被释放——软件堆栈和动态内存分配区域是相对生长的,因此有干涉的可能。

使用特权

评论回复
12
zztchan|  楼主 | 2007-4-26 10:27 | 只看该作者

感谢,感谢

使用特权

评论回复
13
zztchan|  楼主 | 2007-4-26 10:35 | 只看该作者

还请问坏孩子

为什么ram中的data区存放全局变量没有紧密的存放,中间空出一段区域,是为什么预留的吗?又是为什么不在data区的头部或尾巴,而是夹在中间?

非常感谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

10

帖子

1

粉丝