资料介绍
分享到:标签:嵌入式 工业4.0
如果有几个设置参数需要存储到Flash中,我们一般会怎么存储呢?将不同的参数都存储到不同的页中,还是将这几个参数捆绑成一种结构体,每次修改都同时写入一次呢?
将参数存储到固定的地址,则每个参数都将占用Flash的一个块。而将全部参数捆绑一起存入Flash块中,那么只有一个参数修改时,也需要将全部参数一起存一遍。那么有什么更好的方法吗?
前段时间学习Msos,看到其中使用的参数存储的方法设计的很好,它将参数的变量地址与值,一同存储入Flash中。出彩之处是使用参数的变量地址来标记不同的变量。
一、数据结构
这种存储方式使用两个数据结构:
typedef struct
{
uint Address; //参数变量的地址
uint Data; //参数变量的值
}CellStruct;
要存储某个变量,需要将这个变量的地址和它的值一同存储到存储区。这种存储方式的核心就是这个数据结构。这样就可以使用*((uint *)(Address)) = Data 直接将存储值赋值给对应的变量。简单的说就是根据地址值来标记各个不同的参数。
2.存储区的数据结构
typedef struct {
二、代码解析
这种存储方式的使用两个函数:
读取存储区中的变量值并更新变量的值
变量的存储函数
2.1 参数的读取
流程图如上,主要步骤如下:
根据Flash中存写的变量地址,更新变量的值;
将Flash中存写的地址值存入临时数组中,并根据地址值判断是否存在重复存储的无效数据,并将无效数组失效;
清空Flash存储区,将临时数组中有效的变量重新存入Flash中。
通过这些步骤,将存储区中存储的变量读出,并将存储区中的重复的无效数据清除。下面是源代码:
#define pUint(address) *((uint *)(address)) #define PageSize 1024 //Stm32F103R8T6 1Page=1024Byte #define ParameterAddress (FLASH_BASE + (63 * 1024)) #define ParameterSpace PageSize / 4 / 2 static void ReadAllParameter(void) { bool CleanFlag; int i, j;
2.2 参数的写入
参数的写入就很简单了,根据数据结构中的写入点,将变量的地址与值写入Flash中。
static bool WriteParameter(void * dataPointer)
2.3 使用方法
使用方法:
每次上电启动时,调用读取全部变量的函数;
修改某个参数的时候,调用写参数函数;
三、注意事项
在读取参数时,需要在RAM中建立一个ParameterSpace大小的数组,如果这个值太大,会超过栈的大小,使得内存溢出。因此存储区不能开辟的太大。
四、总结
这种方式使用简便,尤其是在更新变量值时,根据存储的变量地址更新相应的值。其实其本质与我们使用变量名来标记不同的变量是一样的。不过也有缺点:
首先其同时存储变量的地址与变量的值,相当于多使用一倍的存储空间;
像上面的注意事项中说的,存储区不能开辟的过大,否则会使临时数组超过栈的大小。
如果有几个设置参数需要存储到Flash中,我们一般会怎么存储呢?将不同的参数都存储到不同的页中,还是将这几个参数捆绑成一种结构体,每次修改都同时写入一次呢?
将参数存储到固定的地址,则每个参数都将占用Flash的一个块。而将全部参数捆绑一起存入Flash块中,那么只有一个参数修改时,也需要将全部参数一起存一遍。那么有什么更好的方法吗?
前段时间学习Msos,看到其中使用的参数存储的方法设计的很好,它将参数的变量地址与值,一同存储入Flash中。出彩之处是使用参数的变量地址来标记不同的变量。
一、数据结构
这种存储方式使用两个数据结构:
typedef struct
{
uint Address; //参数变量的地址
uint Data; //参数变量的值
}CellStruct;
要存储某个变量,需要将这个变量的地址和它的值一同存储到存储区。这种存储方式的核心就是这个数据结构。这样就可以使用*((uint *)(Address)) = Data 直接将存储值赋值给对应的变量。简单的说就是根据地址值来标记各个不同的参数。
2.存储区的数据结构
typedef struct {
二、代码解析
这种存储方式的使用两个函数:
读取存储区中的变量值并更新变量的值
变量的存储函数
2.1 参数的读取
流程图如上,主要步骤如下:
根据Flash中存写的变量地址,更新变量的值;
将Flash中存写的地址值存入临时数组中,并根据地址值判断是否存在重复存储的无效数据,并将无效数组失效;
清空Flash存储区,将临时数组中有效的变量重新存入Flash中。
通过这些步骤,将存储区中存储的变量读出,并将存储区中的重复的无效数据清除。下面是源代码:
#define pUint(address) *((uint *)(address)) #define PageSize 1024 //Stm32F103R8T6 1Page=1024Byte #define ParameterAddress (FLASH_BASE + (63 * 1024)) #define ParameterSpace PageSize / 4 / 2 static void ReadAllParameter(void) { bool CleanFlag; int i, j;
2.2 参数的写入
参数的写入就很简单了,根据数据结构中的写入点,将变量的地址与值写入Flash中。
static bool WriteParameter(void * dataPointer)
2.3 使用方法
使用方法:
每次上电启动时,调用读取全部变量的函数;
修改某个参数的时候,调用写参数函数;
三、注意事项
在读取参数时,需要在RAM中建立一个ParameterSpace大小的数组,如果这个值太大,会超过栈的大小,使得内存溢出。因此存储区不能开辟的太大。
四、总结
这种方式使用简便,尤其是在更新变量值时,根据存储的变量地址更新相应的值。其实其本质与我们使用变量名来标记不同的变量是一样的。不过也有缺点:
首先其同时存储变量的地址与变量的值,相当于多使用一倍的存储空间;
像上面的注意事项中说的,存储区不能开辟的过大,否则会使临时数组超过栈的大小。
下载该资料的人也在下载
下载该资料的人还在阅读
更多 >
- 嵌入式系统系列丛书-时间触发嵌入式系统设计模式 0次下载
- 嵌入式多媒体卡eMMC存储芯片介绍 47次下载
- FPGA中嵌入式块存储器的设计
- 嵌入式详解
- 嵌入式论文
- 嵌入式系统定义
- 嵌入式系统与嵌入式PLC
- 嵌入式系统与嵌入式PLC 27次下载
- 嵌入式硬件系统教程之嵌入式存储技术的详细资料说明 14次下载
- 怎么样才能入门嵌入式嵌入式未来的发展方向是怎样的
- 基于嵌入式主机上的USB海量存储设备类 6次下载
- 嵌入式主机上的USB海量存储设备类
- 嵌入式存储器内建自修复技术 53次下载
- 嵌入式SATA存储系统的研究
- 嵌入式存储器发展现状
- 嵌入式fpga是什么意思 992次阅读
- fpga是嵌入式吗 1767次阅读
- 什么是嵌入式系统?嵌入式系统的具体应用 2096次阅读
- 基于μC/OS嵌入式操作系统的嵌入式数据管理设计 1178次阅读
- 什么是嵌入式技术 1w次阅读
- 嵌入式应用框架EAF详解 2699次阅读
- 关于嵌入式系统以及嵌入式平台下的学科分工详解 1855次阅读
- 嵌入式系统的特点大汇总 5743次阅读
- 随机存储器在嵌入式操作系统中的应用设计详解 1315次阅读
- 一文知道嵌入式存储交换技术的可靠性如何增加 1905次阅读
- 嵌入式行业发展状况_嵌入式行业人才需求_嵌入式系统就业前景分析 2.3w次阅读
- 基于Nand Flash 存储技术的嵌入式linux 系统设计 1520次阅读
- 学习嵌入式要什么基础 4060次阅读
- 典型的嵌入式系统设计 2650次阅读
- 嵌入式存储器的设计方法和策略 1790次阅读
下载排行
本周
- 1TPS54202H降压转换器评估模块用户指南
- 1.02MB | 7次下载 | 免费
- 2华瑞昇CR215芯片数字万用表原理图
- 0.21 MB | 1次下载 | 3 积分
- 3SMD LED选型目录 灯珠手册
- 5.36 MB | 1次下载 | 免费
- 4Tiva C系列DK-TM4C129X入门指南
- 1.69MB | 1次下载 | 免费
- 5电涌保护器(SPD)的选择、安装以及装配
- 4.57 MB | 1次下载 | 免费
- 6时源芯微EMC前车灯案例
- 458.59 KB | 1次下载 | 免费
- 7bq25890、bq25892双级联充电器EVM(PWR692)用户指南
- 2.02MB | 1次下载 | 免费
- 8TPS54426降压转换器评估模块用户指南
- 847.7KB | 次下载 | 免费
本月
- 1ADI高性能电源管理解决方案
- 2.43 MB | 156次下载 | 免费
- 22024PMIC市场洞察
- 2.23 MB | 63次下载 | 免费
- 3开关电源设计原理手册
- 1.83 MB | 30次下载 | 免费
- 4智能门锁原理图
- 0.39 MB | 28次下载 | 免费
- 5OAH0428最新规格书(中文)
- 2.52 MB | 15次下载 | 7 积分
- 6ST7789V2单芯片控制器/驱动器英文手册
- 3.07 MB | 9次下载 | 1 积分
- 7LTH7充电电路和锂电池升压5V输出电路原理图
- 0.04 MB | 7次下载 | 免费
- 8TPS54202H降压转换器评估模块用户指南
- 1.02MB | 7次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935119次下载 | 10 积分
- 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
- 1.48MB | 420061次下载 | 10 积分
- 3Altium DXP2002下载入口
- 未知 | 233084次下载 | 10 积分
- 4电路仿真软件multisim 10.0免费下载
- 340992 | 191367次下载 | 10 积分
- 5十天学会AVR单片机与C语言视频教程 下载
- 158M | 183334次下载 | 10 积分
- 6labview8.5下载
- 未知 | 81581次下载 | 10 积分
- 7Keil工具MDK-Arm免费下载
- 0.02 MB | 73807次下载 | 10 积分
- 8LabVIEW 8.6下载
- 未知 | 65987次下载 | 10 积分
评论
查看更多