【发布时间】:2021-09-19 01:21:21
【问题描述】:
我目前正在将“.ccmbss”部分添加到我的链接器脚本中,我试图在其中放置一些未初始化的变量/结构。这与普通的“.bss”部分是分开的,主要区别在于 .ccmbss 位于与内核耦合的内存 RAM 中,而 .bss 位于普通 RAM 中。
当我尝试使用 C __attribute__((section(.ccmbss))) 指示符在 .ccmbss 部分中放置一个大型未初始化结构 (~32kB) 时,我注意到它获得了一个相同大小的已分配闪存部分。但是,当我没有明确将其设置为移动到 .ccmbss 部分时,它会被分配到 .bss 部分(如预期的那样)并且不占用任何闪存空间。
关于如何保证 ccmbss 部分没有获得关联的内存闪存区域的任何想法?
这是我正在处理的链接器文件的关键部分:
.ccm : {
. = ALIGN(4);
_siccmram = .;
*(.ccm)
_eiccmram = .;
. = ALIGN(4);
} >ccm AT >app
_ccm_loadaddr = LOADADDR(.ccm);
.ccmbss : {
. = ALIGN(4);
*(.ccmbss)
*(.ccmbss*)
. = ALIGN(4);
_eccmbss = .;
_eccmram = .;
} >ccm
.data : {
_data = .;
*(.data*)
. = ALIGN(4);
_edata = .;
} >ram AT >app
_data_loadaddr = LOADADDR(.data);
.bss : {
*(.bss*)
*(COMMON)
. = ALIGN(4);
_ebss = .;
} >ram
【问题讨论】:
-
尝试添加
@nobits,如stackoverflow.com/questions/6252812/…。看起来 GCC__attribute__((section(..)))默认添加了progbits -
@EugeneSh。我认为它还需要
#将评论注入到程序集输出中,如您链接到的问题的最佳答案中所述。 -
@IanAbbott 是的,我的意思是指出该问题/答案作为完整详细信息的参考,如果不清楚,抱歉。
标签: c linker embedded ram flash-memory