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.指定某一个内存区域复位后不初始化(针对编译器AC6):
RW_IRAM12 0x200000B0 UNINIT 0x00000008 { .ANY (.bss.NO_INIT) } uint16_t reset_flg __attribute__((section(".bss.NO_INIT")));上诉代码中UNINIT就是表示该段不需要初始化的意思,在这里面存的数据(如示例的reset_flg)就不用担心程序异常复位后数据丢失的问题了;只要不是上电复位里面存的数据都会在(上电复位是因为断电了,RAM断电的话数据是必然丢失的)
6.新增一个flash或者RAM段(如外挂FLASH或RAM的情况),并指定将某些数据存在该段里面
RW_ERAM1 0xD0000000 0x00800000 ; 外部SDRAM { *.o(HEAP) ;选择堆区 .ANY (EXRAM) ;选择EXRAM节区 }7.目前知道的就这么多,后续发现更多作用再增加
注:1.上诉第2点说了+First是指将该段存放在BIN文件的开头,那么相对应的+Last就是将该段存在BIN文件的末尾,这个可用于在程序中增加校验信息之类。