发新帖我要提问
123
返回列表
打印
[AVR单片机]

21频道 iar PK gcc 现场直播ing

[复制链接]
楼主: smartpower
手机看帖
扫描二维码
随时随地手机跟帖
41
testcode| | 2007-9-19 06:44 | 只看该作者 回帖奖励 |倒序浏览

IAR和GCC的内存分配方式不同

GCC只使用一种内存分配方式,IAR分为CSTACK和RSTACK。
因此可以正确设置CSTACK和RSTACK的大小,RAM的结果会大不相同。

使用特权

评论回复
42
smartpower|  楼主 | 2007-9-19 08:35 | 只看该作者

如42楼所言

如42楼所言,我不知道 RSTACK 和 STACK 要有多大才够用,所以我一般是多分配一点。在编译后也没有一点点的减小stack的分配来试验。对此造成的误解还请见谅。

使用特权

评论回复
43
smartpower|  楼主 | 2007-9-19 08:55 | 只看该作者

对39楼的文件都重新编译

3094 bytes of CODE memory
 165 bytes of DATA memory

编译条件
RSTACK = 0
STACK  = 0
heap   = 0

但程序能不能运行就不知道了。。。。。。只作编译测试。。。

使用特权

评论回复
44
wolver| | 2007-9-19 09:11 | 只看该作者

re: 42楼

testcode:是在开夜车还是晨练啊,这么早就到二姨家来喝茶了...
谢谢你对41楼疑问的解答。

re: 43楼,不用太在意,技术就是在疑问和讨论中得到学习、提高和升华的.....  :)

使用特权

评论回复
45
simon21ic| | 2007-9-20 04:31 | 只看该作者

RStack和CStack一般不为0

IAR和GCC在堆栈处理上不同导致IAR会多用一些RAM.
AVR的函数调用(call,rcall)后,会把返回地址入栈(SP),而PUSH指令可以把寄存器入栈(数据堆栈).下面看看IAR和GCC的不同操作.
GCC的数据堆栈就是SP,而IAR的数据堆栈地址放在Y中(所以有RStack和CStack之分).
所以GCC用"PUSH R0"入栈,而IAR用"ST -Y,R0"入栈.
其实多用的RAM是用在堆栈上的(GCC一个堆栈;IAR两个堆栈).
所以,并不是GCC对RAM控制的好,之是堆栈使用上的区别而已.

使用特权

评论回复
46
simon21ic| | 2007-9-20 05:16 | 只看该作者

更正一下

不是IAR多占用RAM,而是为了堆栈预留的RAM.
可以做一个测试,计算一下GCC现实的RAM占用是否包括堆栈.
IAR改变堆栈大小后,RAM占用是否会变.除去这个因素外,在比较一下.

PS:KG现在这么空了?有兴趣试一下我的AVRmini开发工具吗?最近刚把代码优化了一下.

使用特权

评论回复
47
smartpower|  楼主 | 2007-9-20 08:22 | 只看该作者

晨影你也出来冒泡啦。。。。

晨影你也出来冒泡啦。。。。
我的msn和QQ一直开的,联系我。。。

使用特权

评论回复
48
air2| | 2007-9-20 13:47 | 只看该作者

路过

使用特权

评论回复
49
wlq_9| | 2007-9-21 16:31 | 只看该作者

程序太小

根本就看不出优劣.而且比较的话需要一个人同时非常了解两种编译器,这样才有可比性,但是这非常难.一般来说,这样两种老牌的编译器差距不会非常的大.

使用特权

评论回复
50
end2000| | 2007-9-22 17:46 | 只看该作者

直接用BUTTERFLY的代码来测试吧

它比较大,而且有完整的IAR 和 GCC 的版本.

使用特权

评论回复
51
寒武王冠虫| | 2008-1-2 19:50 | 只看该作者

学习单片机怎么入手


单片机学习一点基础也没有,该怎么入手呀?/
 

使用特权

评论回复
52
hackdj| | 2008-1-3 10:40 | 只看该作者

萝卜青菜各有所爱,有什么好比的

萝卜青菜各有所爱,有什么好比的

使用特权

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

本版积分规则