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

本文详细介绍了在GD32F30x开发中如何使用RORWZICODE、段定位、文件存储、内存区域初始化以及新增外挂存储区的方法,包括使用+.First/.Last指定位置和__attribute__((section))进行代码段分配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值