搜索
bottom↓
回复: 7

求助 傻孩子 AT32UC 在AVR32Studio里如何设定堆栈大小?

[复制链接]

出0入0汤圆

发表于 2010-9-14 19:36:17 | 显示全部楼层 |阅读模式
如题,内存不够用:
toolchain/bin/../lib/gcc/avr32/4.3.2/../../../../avr32/bin/ld.exe: section .stack [00007000 -> 00007fff] overlaps section .bss [00000008 -> 0000707f]
d:/program files/atmel/avr tools/avr32 toolchain/bin/../lib/gcc/avr32/4.3.2/../../../../avr32/bin/ld.exe: Test.elf: section .stack vma 0x7000 overlaps previous sections
想把堆栈设定小一点,看上面的原来是4K,想减小堆栈换得更多的内存。
可是不知道如何设定,我的工程是UDF下载的,另外主芯片是UC3B0256,希望高手指点一下。

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2010-9-15 12:14:58 | 显示全部楼层
顶一下,希望知道的回答一下小弟…

出0入0汤圆

发表于 2010-9-15 19:13:13 | 显示全部楼层
4K的堆栈是在lds文件(见AVR32 Toolchain\avr32\lib\ldscripts文件夹)中默认的设置:
  /* Use a default stack size if stack size was not defined. */
  __stack_size__ = DEFINED(__stack_size__) ? __stack_size__ : 4K;

你可以尝试下在这里定义__stack_size__的大小 :

(原文件名:heap_size.JPG)

PS:以前用A0512驱动SDRAM时参考官方AN试过修改堆栈大小,LZ的情况未作测试,仅供参考。

出0入0汤圆

 楼主| 发表于 2010-9-15 21:22:31 | 显示全部楼层
谢谢LS,通过楼上的指示,去官网下了你说的那个AN手册,
This is assigning the .heap output section to the defined memory region SDRAM.  
__heap_size__ is a linker symbol predefined early in the linker script to:
__heap_size__ = DEFINED(__heap_size__) ? __heap_size__ :
LENGTH(SDRAM);
If the symbol __heap_size__ is already defined, it will be used as the required heap
size, else the heap size will be the total length of the SDRAM region as it was defined
with the MEMORY command. This symbol can be defined when invoking the linker
using the option –Wl,--defsym,__heap_size__=value when calling the linker through
avr32-gcc (which is expressed as –defsym __heap_size__=value when calling avr32-
ld directly).  

按照楼上的方法,同时尝试了手册上的设置,结果都出现了:
src\File_Play.o -lnewlib_addons-at32ucr1-speed_opt
avr32-gcc: –Wl,--defsym,__heap_size__=0x00bff: No such file or directory
Build error occurred, build is stopped

真是无语,所有的设置结果都是找不到文件。

BTW,之前看到 傻孩子 在另一个帖子里也说了堆栈大小可以设定,可没有说详细,希望能给小弟解答一下

出0入0汤圆

 楼主| 发表于 2010-9-15 21:36:20 | 显示全部楼层
已向 avr32.cn<avr32.cn@atmel.com>; 发邮件询问了,有什么进展也在这里公布。

出0入0汤圆

发表于 2010-9-20 17:18:19 | 显示全部楼层
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3260287&bbs_page_no=1&search_mode=3&search_text=feng_matrix&bbs_id=1030

出0入0汤圆

 楼主| 发表于 2010-9-22 14:27:42 | 显示全部楼层
谢谢楼上,这个帖子我看了几回,关键是没有操作的具体说明,另外也找不到.lds 文件。

以下是AVR32技术支持的回复:

在AVR32studio里没有设置stack大小的地方.

Stack的大小是在link script里设定的,你可以通过使用自己写的连接脚本来设定stack大小.

请看这个FAQ来如何使用自己的脚本:  http://support.atmel.no/bin/customer?=&action=viewKbEntry&id=567


Best Regards,
Paul Zhang
Atmel Technical Support Team
---------------------------------------------------------------------------------------------------------
在默认状态下,avr32-gcc使用newlib里的链接器脚本。

如果你要用自己的链接器脚本,可以按照下面的步骤来操作:

复制你自己的链接器脚本到你的工程根目录下(可以简单地拷贝粘贴,也可以在工程下导入)

在菜单中打开工程的属性对话框
选择"Tool Settings"框
选择"AVR32/GNU C Linker -> Miscellaneous"项
在linker flags命令行里添加:-T../my_linker_script.lds

现在你的工程就可以使用你自己的链接器脚本了。

出0入0汤圆

 楼主| 发表于 2010-9-22 15:14:51 | 显示全部楼层
这个问题已经解决了,
1.在AVR32 Studio 目录下找到.lds 我要找的是:link_uc3b0256.lds
2.把它复制到工程的根目录,直接复制粘贴上去。
3.敢好改个名吧。mylink_uc3b0256.lds
4.打开.lds文件,找到
  /* Use a default stack size if stack size was not defined. */
  __stack_size__ = DEFINED(__stack_size__) ? __stack_size__ : 4K;
看到默认是4K的,把它改成
  /* Use a default stack size if stack size was not defined. */
  __stack_size__ = DEFINED(__stack_size__) ? __stack_size__ : 3K;
5.保存,然后
  在菜单中打开工程的属性对话框
  选择"Tool Settings"框
  选择"AVR32/GNU C Linker -> Miscellaneous"项
  在linker flags命令行里添加:-T../mylink_uc3b0256.lds
6.好了,现在改好了。 可以编译你的工程了....
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 20:45

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表