在一个实际的项目中,flash的使用会进行专门的安排,分成不同的区域供不同的目的使用。最常见的是分成bootloader区和主程序区。对于有些需要在掉电后保存数据的,还会分配一段区域保存这些重要的数据,这一块儿我们就叫它eeprom吧。
通常bootloader会放在flash最开始的地方,eeprom放在flash最后,具体大小需要根据实际的项目需要分配。
这种情况下需要对链接文件进行修改,主要是改一下main app的起始地址,否则默认情况下都是存放在flash最开始的地方,main app就会把bootloader覆盖掉。
在linux下,后缀为ld的就是链接文件,它里边有这么一段内容:
memory就是用来给系统分配存储空间的,包括ram、flash、外部存储等等。上图中是main app的分配情况。这个示例中,flash的起始地址是0x08000000,给bootloader留了4k(0x1000)的空间,所以main app的起始地址origin就是0x08001000,长度的话32k减去4k剩下27k。这样在链接的时候就以0x08001000为基准往后安排。
另外还有一种情况需要在链接文件中修改。我们在开发的时候有时候想要某些特定的数据或代码保存在特定的flash地址处,这个时候就可以通过在链接文件中添加这个特定的段空间来搞定。比如下面的例子
它在main app的最开始存放向量表,之后存放软件版本信息,接下来才是代码段。
分配好空间后,需要给自定义的段起一个名字,以便在程序中调用。
关键字sections下就是各个数据段的具体分配情况,段名.isr_vector指定的内容放在flash_vectab下,.firmware_info指定的内容放在flash_version下。在keep后括号内的名称就是代码中用来指定的段名。具体使用方法如下:
汇编:
这个很少用到,除非你用汇编写代码。
c:
通过上面的操作,就可以把指定的数据放到flash特定的地方。
!!!:不同的编译器实现的细节和用到的关键字不一样,需要查看其具体的帮助手册。
MAX17088 Internal-Switch Boost
手机蓝牙的功能介绍
罗氏线圈在纳秒级电磁脉冲中的应用
一年一度的"InterDrone商业无人机展“如期召开
富昌电子凭借可再生能源领域的突破性增长,获颁WAGO(万可)中国区最佳业绩奖
处理器的Flash空间分配
是什么在保障电网的运行安全?
BIOS微码更新可大幅度的增加Zen 2处理器的性能
Acrel-2000电力监控系统在交通银行武汉金融中心的应用
小米游戏本2019款评测 狠堆料让配置再无缺憾
面板厂Q2调节产能度难关 布局新品Q3迎旺季
使用RX HMI解决方案满足新常态的需求
LED显示屏控制系统
总线制气体报警的三个主要布线方式
校园网络视频监控系统的结构组成及功能实现
实时操作系统和分时操作系统的区别
南方电网通过AI在深圳建成首条智能化电缆隧道,效率提升12倍
车企扩大非车规芯片使用,IDM市场份额受影响?
变压器的事故检测与措施的详细说明
LabVIEW2010的报表生成函数分析