完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 tovax 于 2014-8-14 15:19 编辑
链接文件中,放入RAM区的三个段代码如下: /************************************************************************************ * * data section * Goes into RAM ************************************************************************************/ .data : AT (__etext) { /* Global symbol at start of data */ __data_start__ = .; *(vtable) *(.data*) . = ALIGN(4); /* preinit data */ PROVIDE_HIDDEN (__preinit_array_start = .); KEEP(*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); . = ALIGN(4); /* init data */ PROVIDE_HIDDEN (__init_array_start = .); KEEP(*(SORT(.init_array.*))) KEEP(*(.init_array)) PROVIDE_HIDDEN (__init_array_end = .); . = ALIGN(4); /* finit data */ PROVIDE_HIDDEN (__fini_array_start = .); KEEP(*(SORT(.fini_array.*))) KEEP(*(.fini_array)) PROVIDE_HIDDEN (__fini_array_end = .); KEEP(*(.jcr*)) . = ALIGN(4); /* Global symbol at end of data */ __data_end__ = .; } > RAM /************************************************************************************ * * bss section (Uninitialized data) * Goes into RAM ************************************************************************************/ .bss : { . = ALIGN(4); /* Global symbol at start of bss */ __bss_start__ = .; *(.bss*) *(COMMON) . = ALIGN(4); /* Global symbol at end of bss */ __bss_end__ = .; } > RAM /************************************************************************************ * * user_heap_stack section * Check that there is enough RAM left for stack and heap ************************************************************************************/ ._user_heap_stack : { . = ALIGN(8); __heap_start__ = .; . = . + _Min_Heap_Size; __heap_end__ = .; . = ALIGN(8); __stack_start__ = .; . = . + _Min_Stack_Size; __stack_end__ = .; _estack = .; . = ALIGN(8); } >RAM //------------代------码------到------此------------ 这是新建的工程生成的链接文件,源文件只有startup.s和main.c,main.c中就一个死循环。 直接build后,提示RAM越界超出344字节。(注:MPU的RAM大小为2KB, _Min_Heap_Size和_Min_Stack_Size都设置为0x80) 极端一点,把_Min_Heap_Size和_Min_Stack_Size都设置为0,再次编译后,仍然提示RAM越界超出88字节。(注:88 = 344 - 0x80 - 0x80) 从以上代码看出,RAM区域包括了.data, .bss, ._user_heap_stack 把_Min_Heap_Size和_Min_Stack_Size都设置为0后,._user_heap_stack段是不是就可以忽略了,那么为什么还会超出88字节呢? 我的RAM只有2KB,这样是不是.data+.bss就超了2KB了,但是我这只是新建了个工程,没这么多数据啊,求大神解释 还有,在.data段中,preinit, init, finit, jcr这些数据都是什么意思,是不是这些数据导致了链接时RAM越界? 再次拜谢!!! |
|
相关推荐
2个回答
|
|
经过测试,把"preinit data, init data, fini data"三部分屏蔽掉就可以了,不知道这么简单的程序,这个几个怎么占用那么大的RAM空间?
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
1428 浏览 6 评论
1387 浏览 0 评论
IaaS+on+DPU(IoD)+下一代高性能算力底座技术白皮书
2543 浏览 0 评论
飞凌嵌入式-ELFBOARD 常用的USB接口及其不同版本介绍第1期
1121 浏览 0 评论
【Vision Board创客营连载体验】RA8D1-Vision Board上OSPI-Flash实践
1603 浏览 0 评论
66336 浏览 21 评论
嵌入式热门DIY项目:智能机器人开源资料合集(原理图、代码、论文)
68099 浏览 22 评论
58358 浏览 32 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-28 02:11 , Processed in 0.581882 second(s), Total 71, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191