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文件的末尾,这个可用于在程序中增加校验信息之类。