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

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

3天内不再提示

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

5RJg_mcuworld 来源:未知 作者:易水寒 2018-10-03 10:49 次阅读

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

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

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

一、数据结构

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

typedef struct

{

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

uint Data; //参数变量的值

}CellStruct;

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

二、代码解析

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

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

变量的存储函数

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大小的数组,如果这个值太大,会超过栈的大小,使得内存溢出。因此存储区不能开辟的太大。

总结

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

首先其同时存储变量的地址与变量的值,相当于多使用一倍的存储空间;像上面的注意事项中说的,存储区不能开辟的过大,否则会使临时数组超过栈的大小。

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

    关注

    5086

    文章

    19143

    浏览量

    306094
  • FlaSh
    +关注

    关注

    10

    文章

    1638

    浏览量

    148182
  • 数据结构
    +关注

    关注

    3

    文章

    573

    浏览量

    40154

原文标题:嵌入式中参数的存储,你是怎么处理的?

文章出处:【微信号:mcuworld,微信公众号:嵌入式资讯精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式参数存储处理

    嵌入式参数存储,你是怎么处理的?
    发表于 03-30 08:29

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

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

    嵌入式系统的数据存储和管理的相关资料分享

    【功能】: 嵌入式系统的数据存储和管理 数据查询【定义】:嵌入式数据库系统是指支持移动计算或某种特定计算模式的数据库管理系统,它通常与操作系统和具体应用集成在一起,运行在智能型
    发表于 12-17 07:15

    嵌入式系统的EEPROM和FRAM是什么

    一定空间用于存储应用代码、非易失性数据和配置信息。EEPROM往往是开发人员最先、最常考虑用于嵌入式系统的存储器件。在嵌入式应用,这类非易
    发表于 12-22 07:33

    嵌入式平台中参数的思考与设计相关资料下载

    的部分。在上层应用可以使用基于文件的ini、json、xml等参数功能接口,非常灵活方便。可在嵌入式环境,由于资源的限制无法使用这些功能接口,需要另行设计,是一项有挑战的任务。
    发表于 12-23 06:05

    何处理存储在非易失性设备的内存数据集损坏

    保护您的嵌入式软件免受内存损坏本文的目的是提供一种软件方法,解释如何处理存储在非易失性设备(如小型 EEPROM 或闪存)的内存数据集损坏。在微型
    发表于 12-24 07:27

    基于虚拟存储嵌入式存储系统的设计方法

    基于虚拟存储嵌入式存储系统的设计方法   1、引言   嵌入式系统由嵌入式硬件和固化在硬件平台中的
    发表于 11-05 16:10 777次阅读
    基于虚拟<b class='flag-5'>存储</b>的<b class='flag-5'>嵌入式</b><b class='flag-5'>存储</b>系统的设计方法

    浅析嵌入式存储系统设计方法

    浅析嵌入式存储系统设计方法  嵌入式存储系统由嵌入式硬件和固化在硬件平台中的嵌入式
    发表于 01-26 16:32 1123次阅读
    浅析<b class='flag-5'>嵌入式</b><b class='flag-5'>存储</b>系统设计方法

    嵌入式处理系统

    嵌入式处理系统 嵌入式系统概述 嵌入式处理系统设计 并行计算机的组织结构模型 嵌入式
    发表于 02-25 16:53 43次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>处理</b>系统

    嵌入式主机上的USB海量存储设备类

    嵌入式主机上的USB海量存储设备类重点论述基于USB的海量存储(USB Mass Storage)设备功能在ARM嵌入式系统设计。
    发表于 03-06 16:33 43次下载
    <b class='flag-5'>嵌入式</b>主机上的USB海量<b class='flag-5'>存储</b>设备类

    嵌入式参数存储诀窍分享

    分享到:标签:嵌入式 工业4.0 如果有几个设置参数需要存储到Flash,我们一般会怎么存储呢?将不同的
    发表于 10-13 20:24 0次下载
    <b class='flag-5'>嵌入式</b>的<b class='flag-5'>参数</b><b class='flag-5'>存储</b>诀窍分享

    FPGA嵌入式存储器的设计

    FPGA嵌入式存储器的设计(嵌入式开发平台)-该文档为FPGA嵌入式
    发表于 08-04 10:14 6次下载
    FPGA<b class='flag-5'>中</b><b class='flag-5'>嵌入式</b>块<b class='flag-5'>存储</b>器的设计

    嵌入式处理

      嵌入式处理器是嵌入式系统的核心,是控制、辅助系统运行的硬件单元。范围极其广阔,从最初的4位处理器,目前仍在大规模应用的8位单片机,到最新的受到广泛青睐的32位,64位
    发表于 10-21 13:36 3次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>处理</b>器

    嵌入式开发嵌入式硬件和软件有什么区别?

    嵌入式指的是把软件直接烧录在硬件里,而不是安装在外部存储介质上,就像赋予机器人灵魂,从而方便人类操控。在嵌入式开发,分为嵌入式硬件和
    的头像 发表于 07-18 18:11 3494次阅读
    <b class='flag-5'>嵌入式</b>开发<b class='flag-5'>中</b>,<b class='flag-5'>嵌入式</b>硬件和软件有什么区别?

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

    嵌入式软件中经常要存储一些非易失参数,例如用户设置、校准参数、设备运行参数等,通常情况下我们都会选择存储
    的头像 发表于 10-27 14:12 1444次阅读
    <b class='flag-5'>嵌入式</b>软件<b class='flag-5'>中</b>如何利用内部flash<b class='flag-5'>存储</b><b class='flag-5'>参数</b>呢?