链接文件/分散加载文件的作用

1.指定RO RW ZI CODE的存储位置:

.ANY(+RO)
.ANY(+RW +ZI)

2.指定某个段的存储位置,如指定RESET段的存储位置:

*.o (RESET, +First)

这里创建了一个RESET段并指定了它的存储位置,那个+First是指首先存储,即存储在开头位置。

3.指定某个文件的RO RW ZI的存储位置,如:

gd32f30x.o (HEAP)
gd32f30x.o (+RW +ZI)
gd32f30x.o (+RO)

上面三行代码分别指定了gd32f30x.o文件的堆、RW、ZI、RO的存储位置

4.生成/创建一个段:

.ANY (seg)

以上代码创建了一个名为seg的段,然后程序中就可以配合__attribute__((section("seg")))将某一个变量或函数指定到该段了,如:

#define MY_FLASH  __attribute__((section("seg")))

MY_FLASH u16 test_function(void)
{
    return 0;
}

5.指定某一个内存区域复位后不初始化:

RW_IRAM12 0x200000B0 UNINIT 0x00000008
{
    .ANY (seg)
}

上诉代码中UNINIT就是表示该段不需要初始化的意思,在这里面存的数据就不用担心程序异常复位后数据丢失的问题了;只要不是上电复位里面存的数据都会在(上电复位是因为断电了,RAM断电的话数据是必然丢失的)

6.新增一个flash或者RAM段(如外挂FLASH或RAM的情况),并指定将某些数据存在该段里面

RW_ERAM1 0xD0000000 0x00800000    ; 外部SDRAM
{  
        *.o(HEAP)            ;选择堆区
        .ANY (EXRAM)       ;选择EXRAM节区
}

7.目前知道的就这么多,后续发现更多作用再增加

注:1.上诉第2点说了+First是指将该段存放在BIN文件的开头,那么相对应的+Last就是将该段存在BIN文件的末尾,这个可用于在程序中增加校验信息之类。

你可能感兴趣的:(linux,c语言,单片机)