GCC的LD链接脚本怎么把指定文件的变量都加到指定的地址
在用的一款MCU的SRAM有两个段,使用MDK的ARMCC中的sct分散加载文件可以把指定的文件设置到指定的SRAM段内。RW_IRAM2 0x20020000 0x00004000; powerdown variables
{
tasks.o (+RW +ZI)
timers.o(+RW +ZI)
heap_4.o(+RW +ZI)
port.o(+RW +ZI)
stdout.o(+RW +ZI)
mvars.o(+RW +ZI)
main.o(+RW +ZI)
system_nss32lockx.o(+RW +ZI)
}
RW_IRAM1 0x20000000 0x00020000
{
.ANY (+RW +ZI)
}
由于某些原因需要用GCC。
GCC的LD链接脚本可以通过设置增加MEMORY段,并在代码中通过__attribute__((section(".R-SRAM")))的方法把变量设置在指定的地址范围。
/* Specify the memory areas */
MEMORY
{
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 512K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
R-SRAM (xrw) : ORIGIN = 0x20020000, LENGTH = 16K
}
有没有办法像sct分散加载文件一样,把某些文件里面的所有的变量都放在这个指定的地址范围内?
试试这个: https://stackoverflow.com/questions/63667252/is-it-possible-to-change-default-sections-for-a-whole-file-with-gnu-arm-embedded dukelec 发表于 2024-1-5 09:03
试试这个: https://stackoverflow.com/questions/63667252/is-it-possible-to-change-default-sections-fo ...
(引用自2楼)
谢谢指点。
搞定了。
.r_section :
{
. = ALIGN(4);
__mysection_start__ = .;
*(.r_section*)
*main.o (.bss .bss* .data .data*)
__mysection_end__ = .;
} > R-SRAM
这个方法是可以的。
另外参考了参考了silicon labs的文档
https://community.silabs.com/s/article/how-to-locate-an-entire-file-at-specific-memory-region?language=en_US
页:
[1]