在STM32链接文件内创建
/* FLASH.ld */
/* Memories definition */
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 448K
MEM_TEST (rx) : ORIGIN = 0x8007000, LENGTH = 64K
}
/* Sections */
SECTIONS
{
.section_test :
{
mem_test_start = . ;
* (.section_test1);
mem_test_end = . ;
} > MEM_TEST
...
}
// main.c
#define ARM_SECTION(SECTION) __attribute__((section(#SECTION)))
ARM_SECTION(.section_test) static int volatile test_var[2] = {1};
ARM_SECTION(.section_test1) static int volatile test_var1[3] = {1};
void main(void)
{
test_var1[0] = test_var1[1];
test_var1[1] = test_var1[2];
test_var1[2] = test_var1[0];
test_var[1] = test_var[0];
test_var[0] = test_var[1];
while (1);
}
// main.map
.section_test 0x0000000008007000 0x14
0x0000000008007000 mem_test_start = .
*(.section_test1)
.section_test1
0x0000000008007000 0xc ./Core/Src/main.o
0x000000000800700c mem_test_end = .
.section_test 0x000000000800700c 0x8 ./Core/Src/main.o
在链接文件内创建一个sectoin_test1的输入段,并将该输入段指向section_test的输出段上,并且所有输出的数据指向MEM_TEST内存中。
进行编译之后,可以在map文件内看到在 .section_test1
中有12B大小的数据,在其他 .sectoin_test
中还有8B大小的数据,最后对应的是 test_var
和 test_var1
变量。