MCU绝对存储地址定位的一种方法
- 2025-06-27 20:20:00
#define VERINFO_ADDR_BASE (0x0800FF00) //存放FLASH的地址
constchar Software_Ver[] __attribute__((at(VERINFO_ADDR_BASE + 0x00))) = "Software: 1.0.0";
constchar Compiler_Date[] __attribute__((at(VERINFO_ADDR_BASE + 0x40))) = "Date: "__DATE__;
constchar Compiler_Time[] __attribute__((at(VERINFO_ADDR_BASE + 0x60))) = "Time: "__TIME__;
主要是通过瑞萨官方编译工具e2 studio对.ld脚本文件修改,在Flash上划一小块出来,然后通过__attribute__实现。
具体步骤如下
1
首先在Flash上划一块出来,在e2 studio对.ld文件进行修改。工程路径如下图

2
fsp.ld文件中,memory选项,Add新的分区,这里直接指定起始地址和长度。

3
fsp.ld下,文本编辑,初始my_code(!rx),删除”!”

4
如下,编辑my_code

在文本编辑会自动创建代码如下:

5
为了避免可能出现的问题,最好修改Flash地址空间,因为到此时,my_code被包在Flash区,需要修改flash区地址。
首先,复制memory_regions.ld并改名到同一目录下,在fSP.ld文件文本编辑处include新复制的文件:

接下来,我们需要在memory_regions_my.ld修改Flash空间

同样,我们可以在此处设置my_code的起始地址和长度,在第2步新建的分区直接用起始地址和长度别名替代。
6
在主函数变量声明处,添加代码
const charbuff[16] __attribute__((section(".my_code "))) = {"1234567890abcdef"};
buff长度需与分区大小相同,否则会报错。
Build需要使用release。
7
编译完成后,查看如下:

推荐大家使用e2 studio help contents。
------------ END ------------

嵌入式项目如何组建开发小组?

MCU串口自动识别波特率的几种检测方法

声明:本文内容及配图由入驻作者撰写或合作网站授权转载。文章观点仅代表作者本人,不代表科技区角网立场。仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
点击这里
扫码添加微信

- 点赞 0
-
分享
微信扫一扫
-
加入群聊
扫码加入群聊