完善资料让更多小伙伴认识你,还能领取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空间?
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1033 浏览 0 评论
2877 浏览 0 评论
图腾柱PFC无法上升至400V,且电感电流为正弦波形,但是幅值极小
9386 浏览 0 评论
飞凌嵌入式ElfBoard-Vim编辑器之静态链接和动态链接
2898 浏览 0 评论
使用 LinkBoy 将程序导出为 C 语言代码并烧录至 Arduino ESP32 开发板
2302 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 06:35 , Processed in 0.869213 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
327