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

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

3天内不再提示

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

GReq_mcu168 来源:未知 作者:胡薇 2018-09-30 17:37 次阅读

如果有几个设置参数需要存储到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大小的数组,如果这个值太大,会超过栈的大小,使得内存溢出。因此存储区不能开辟的太大。四、

总结

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

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

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

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

    关注

    4981

    文章

    18281

    浏览量

    288382
  • 存储
    +关注

    关注

    12

    文章

    3856

    浏览量

    84660

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

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

收藏 人收藏

    评论

    相关推荐

    浅析如何学习基于ARM平台的嵌入式系统

    浅析如何学习基于ARM平台的嵌入式系统
    发表于 08-18 11:03

    嵌入式相关的资料

    3. 外存储器接口技术ARM处理器与外部存储器(Flash和SDRAM)的接口技术是嵌入式最小系统硬件设计的关键。根据需要选择合理的接口方式,可以有效的提升
    发表于 02-09 20:38

    嵌入式参数存储处理

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

    浅析嵌入式系统

    嵌入式系统对于不懂这方面知识的人来说,嵌入式系统这个词可能显得比较深奥,其实嵌入式系统和普通人的生活联系非常紧密。手机、U盘你一定很熟悉吧,它就是典型的嵌入式系统;MP3、MP4、微波
    发表于 08-12 08:05

    浅析嵌入式系统结构

    1,嵌入式系统结构1.1嵌入式系统硬件结构:嵌入式硬件系统主要由微处理器MPU,外围电路,以及外设组成,微处理器为ARM嵌入式处理芯片如ARM7TMDI系列及ARM9系类处理器,MPU
    发表于 10-27 06:10

    浅析input输入子系统框架嵌入式Linux驱动

    )------USB键盘驱动程序嵌入式Linux驱动笔记(五)------学习platform设备驱动嵌入式Linux驱动笔记(六)------浅析input输入子系统框架嵌入式Lin
    发表于 11-05 06:47

    浅析嵌入式学习步骤

    嵌入式Linux要学哪些?一些人总在寻思,怕走了弯路,又怕学的东西离企业需求远。那么今天就请华清远见高级讲师曹大神告诉你,9点浅析嵌入式学习步骤。下面是他本人亲笔。1、要学习Linux,首先要会用
    发表于 11-05 08:05

    浅析嵌入式技术

    一、嵌入式技术的发展嵌入式系统的出现最初是基于单片机的,这时的应用只是使用8位的芯片,执行一些单线程的程序,还谈不上“系统”的概念。之后的嵌入式系统开始使用“操作系统”来编写嵌入式应用
    发表于 11-08 06:46

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

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

    嵌入式硬件系统与存储体系

    慕课电子科技大学.嵌入式系统.第二章.嵌入式硬件系统(第一部分.嵌入式系统存储体系0 目录2 嵌入式硬件系统(第一部分)2.5
    发表于 12-17 08:08

    嵌入式Linux存储设备包含什么

    前言:本文所说的嵌入式Linux存储设备包含:U盘、SD卡、NandFlash分区。本文主要实现嵌入式Linux在开机后,可自动检测存储外设(U盘/SD卡)是否插入,对
    发表于 12-21 08:19

    嵌入式系统概论与嵌入式系统的特点

    都可能会产生致命的后果实时性:需要实时数据软件固化:软件都固化在只读存储器ROM中,用户不能随意更改其程序功能嵌入式系统的应用嵌入式处理器的结构类型的4种分类方式1.按指令集划分CIS
    发表于 12-21 08:21

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

    嵌入式平台中参数的思考与设计提笔有因存储介质FLASH存储设计数据类型设计参数归类设计读写接口设计串口读写
    发表于 12-23 06:05

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

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