原创
对NorFlash存储进行划分
2024-1-13 14:22
226
0
分类:
物联网
文集:
学习分享
开发板上带的片外norflash,我想人为把它划分为几个区域,专门存放特殊的内容,例如,划一片4K区域存放各种参数、系数、常数,再划一片区域专门存放事件记录等,这些区域是不能让其它程序和数据占用的,该如何对这些区域分开并在下载固件时不会被写到这个区域。我看链接文件FLASH_XIP.ld里有相关描述,但不知道是不是要修改这个链接文件?如何修改?要对NorFlash存储进行划分,并且在下载固件时不被写入到特定的区域,您需要按照以下步骤进行操作: 1. 确定划分区域的大小和起始地址:首先确定每个区域的大小,比如4K。然后确定每个区域的起始地址,确保不会与其他程序和数据冲突。 2. 修改链接文件:链接文件FLASH_XIP.ld定义了程序的存储布局和内存映射。您需要在该链接文件中添加相关描述来划分NorFlash存储的区域。修改文件时,可以定义起始地址和大小,并指定段的属性为特殊的内容区域,例如: ``` .special_content : { . = 0x80000000; // 替换为对应的起始地址 KEEP(*(.special_content_section)) } > norflash ``` 这样就定义了一个特殊内容区域,起始地址为0x80000000,并将特殊内容的节(.special_content_section)放置在该区域上。 3. 在应用程序中指定特殊内容的位置:在应用程序中使用特殊内容时,需要将相关内容放置在特殊内容的节(.special_content_section)中。比如: ``` const uint8_t special_data[] __attribute__((section(".special_content_section"))) = { ... }; ``` 这样声明的特殊数据将被放置在特殊内容区域中。 注意:不同的编译器可能有不同的方式来指定特殊数据的位置,请根据使用的编译器和开发环境进行相应的设置。 4. 在下载固件时排除特殊内容区域:在下载固件时,需要指定排除特殊内容区域,以防止被写入。具体的操作方式可能会因开发环境而异。一种常见的方式是通过配置下载工具,在下载时指定固件的起始地址和大小,排除特殊内容区域。 例如,使用OpenOCD下载工具,可以使用以下命令来指定固件的起始地址和大小: ``` flash write_image erase firmware.elf 0x00000000-0x7FFFFFFF ``` 这将下载固件并排除了0x80000000及其之后的地址范围。 通过上述步骤,您可以对NorFlash存储进行划分,并且确保特定区域不会被其他程序和数据占用,同时在下载固件时排除特殊内容区域。请根据您的具体开发环境和需求进行相应的调整。 |
作者: 丙丁先生, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-3996156.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论