0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如果有几个设置参数需要存储到Flash中,我们一般会怎么存储呢?

GReq_mcu168 来源:未知 作者:李倩 2018-05-14 16:15 次阅读

如果有几个设置参数需要存储到Flash中,我们一般会怎么存储呢?将不同的参数都存储到不同的页中,还是将这几个参数捆绑成一种结构体,每次修改都同时写入一次呢?

将参数存储到固定的地址,则每个参数都将占用Flash的一个块。而将全部参数捆绑一起存入Flash块中,那么只有一个参数修改时,也需要将全部参数一起存一遍。那么有什么更好的方法吗?

前段时间学习Msos,看到其中使用的参数存储的方法设计的很好,它将参数的变量地址与值,一同存储入Flash中。出彩之处是使用参数的变量地址来标记不同的变量。

一、数据结构

这种存储方式使用两个数据结构:

typedef struct

{

uint Address; //参数变量的地址

uint Data; //参数变量的值

}CellStruct;

要存储某个变量,需要将这个变量的地址和它的值一同存储到存储区。这种存储方式的核心就是这个数据结构。这样就可以使用*((uint *)(Address)) = Data直接将存储值赋值给对应的变量。简单的说就是根据地址值来标记各个不同的参数。

2.存储区的数据结构

typedefstruct{

二、代码解析

这种存储方式的使用两个函数:

读取存储区中的变量值并更新变量的值

变量的存储函数

2.1 参数的读取

流程图如上,主要步骤如下:

根据Flash中存写的变量地址,更新变量的值;

将Flash中存写的地址值存入临时数组中,并根据地址值判断是否存在重复存储的无效数据,并将无效数组失效;

清空Flash存储区,将临时数组中有效的变量重新存入Flash中。

通过这些步骤,将存储区中存储的变量读出,并将存储区中的重复的无效数据清除。下面是源代码:

#definepUint(address)*((uint*)(address))#definePageSize1024//Stm32F103R8T61Page=1024Byte#defineParameterAddress(FLASH_BASE+(63*1024))#defineParameterSpacePageSize/4/2staticvoidReadAllParameter(void){boolCleanFlag;inti,j;

2.2 参数的写入

参数的写入就很简单了,根据数据结构中的写入点,将变量的地址与值写入Flash中。

staticboolWriteParameter(void*dataPointer){

2.3 使用方法

使用方法:

每次上电启动时,调用读取全部变量的函数;

修改某个参数的时候,调用写参数函数;

三、注意事项

在读取参数时,需要在RAM中建立一个ParameterSpace大小的数组,如果这个值太大,会超过栈的大小,使得内存溢出。因此存储区不能开辟的太大。四、

总结

这种方式使用简便,尤其是在更新变量值时,根据存储的变量地址更新相应的值。其实其本质与我们使用变量名来标记不同的变量是一样的。不过也有缺点:

首先其同时存储变量的地址与变量的值,相当于多使用一倍的存储空间;

像上面的注意事项中说的,存储区不能开辟的过大,否则会使临时数组超过栈的大小。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储
    +关注

    关注

    12

    文章

    3842

    浏览量

    84618
  • 变量
    +关注

    关注

    0

    文章

    592

    浏览量

    28099

原文标题:技术干货:嵌入式中参数存储的一种方式

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如果存储空间已满,我该怎么办?

    。 •日历备忘。 •下载的应用程序包。•如果有不再需要的应用程序,请卸载这些应用程序 (选择功能表 > 设置 > 数据管理 > 程序管理 > 已安装的程序)。•您不再需要的其他任何
    发表于 01-23 17:38

    CS SD NAND在打猎相机存储应用

    如果有猎物出现,立刻唤醒机器以极快的速度进行抓拍。为什么说这样的款产品会用到SD NAND?1、产品要求启动速度非常快,猎物出现,
    发表于 04-26 18:40

    请问单片机为什么一般要集成flash和eeprom两种存储器?

    我想问下,单片机为什么一般要集成flash和eeprom两种存储器啊,光用其中种不可以吗?
    发表于 10-11 08:42

    MCU产品开发实现参数存储功能

    在工作,凡是涉及产品开发几乎都会实现参数存储功能,一般参数
    发表于 11-10 07:39

    嵌入式软件如何利用内部flash存储参数

    01前言嵌入式软件中经常要存储些非易失参数,例如用户设置、校准参数、设备运行参数等,通常情况下
    发表于 11-25 08:52

    关于CH573的存储映射结构

    ,常用的些代码参数可以放在DataFlash内,共有32KB的存储空间。系统Bootlader和配置信息InfoFlash内的数据一般是不操作,InfoFlash内的数据可通过工具进
    发表于 04-07 11:46

    嵌入式中参数存储的一种方式

    如果有几个设置参数需要存储Flash中,
    发表于 04-20 09:57 668次阅读

    一招教你如何使用嵌入式参数代码,入门必懂知识

    如果有几个设置参数需要存储Flash中,
    发表于 04-30 07:50 2547次阅读

    嵌入式的参数存储诀窍分享

    分享到:标签:嵌入式 工业4.0 如果有几个设置参数需要存储
    发表于 10-13 20:24 0次下载
    嵌入式的<b class='flag-5'>参数</b><b class='flag-5'>存储</b>诀窍分享

    干货:嵌入式中参数存储的一种方式详细教程

    如果有几个设置参数需要存储Flash中,
    发表于 05-18 16:33 1758次阅读

    如何处理嵌入式中参数存储

    如果有几个设置参数需要存储Flash中,
    的头像 发表于 10-03 10:49 3173次阅读

    浅析嵌入式参数存储的新方式

    如果有几个设置参数需要存储Flash中,
    的头像 发表于 09-30 17:37 3143次阅读

    服务器渠道转型做存储是否还有机会 如果有机会,如何做

    年了,IT市场发生了很大的变化,现在再转型还有机会吗?如果有机会,如何做? 笔者有一位朋友是做戴尔科技集团服务器的渠道,他就面临这样的困惑。因此,在2020年底的一个周末,他请我这个非著名存储专家来聊聊这个话题。 是否转型做存储
    的头像 发表于 01-12 09:08 2260次阅读
    服务器渠道转型做<b class='flag-5'>存储</b>是否还有机会 <b class='flag-5'>如果有</b>机会,如何做

    嵌入式软件中利用内部flash存储参数的方法

    01前言嵌入式软件中经常要存储一些非易失参数,例如用户设置、校准参数、设备运行参数等,通常情况下我们
    发表于 11-16 18:21 18次下载
    嵌入式软件中利用内部<b class='flag-5'>flash</b><b class='flag-5'>存储</b><b class='flag-5'>参数</b>的方法

    如何使用Flash模拟EEPROM存储参数

    在MCU的使用中,经常遇到需要存储参数或掉电保持数据等功能。其中,Flash和EEPROM是常见的非易失性存储
    的头像 发表于 09-21 09:14 871次阅读