处理器的Flash空间分配

在一个实际的项目中,Flash的使用会进行专门的安排,分成不同的区域供不同的目的使用。最常见的是分成bootloader区和主程序区。对于有些需要在掉电后保存数据的,还会分配一段区域保存这些重要的数据,这一块儿我们就叫它eeprom吧。

通常bootloader会放在flash最开始的地方,eeprom放在flash最后,具体大小需要根据实际的项目需要分配。

处理器的Flash空间分配

这种情况下需要对链接文件进行修改,主要是改一下main app的起始地址,否则默认情况下都是存放在flash最开始的地方,main app就会把bootloader覆盖掉。

在linux下,后缀为ld的就是链接文件,它里边有这么一段内容:

处理器的Flash空间分配

MEMORY就是用来给系统分配存储空间的,包括RAM、FLASH、外部存储等等。上图中是main app的分配情况。这个示例中,flash的起始地址是0x08000000,给bootloader留了4k(0x1000)的空间,所以main app的起始地址ORIGIN就是0x08001000,长度的话32k减去4k剩下27k。这样在链接的时候就以0x08001000为基准往后安排。

另外还有一种情况需要在链接文件中修改。我们在开发的时候有时候想要某些特定的数据或代码保存在特定的flash地址处,这个时候就可以通过在链接文件中添加这个特定的段空间来搞定。比如下面的例子

处理器的Flash空间分配

它在main app的最开始存放向量表,之后存放软件版本信息,接下来才是代码段。

分配好空间后,需要给自定义的段起一个名字,以便在程序中调用。

处理器的Flash空间分配

关键字SECTIONS下就是各个数据段的具体分配情况,段名.isr_vector指定的内容放在FLASH_VECTAB下,.firmware_info指定的内容放在FLASH_VERSION下。在KEEP后括号内的名称就是代码中用来指定的段名。具体使用方法如下:

汇编:

处理器的Flash空间分配

这个很少用到,除非你用汇编写代码。

C:

处理器的Flash空间分配

通过上面的操作,就可以把指定的数据放到flash特定的地方。

!!!:不同的编译器实现的细节和用到的关键字不一样,需要查看其具体的帮助手册。

展开阅读全文

页面更新:2024-05-21

标签:分配   目的   块儿   空间   处理器   关键字   区域   情况   代码   地址   链接   文件   地方   项目   内容   数据   数码

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top