电子发烧友App

硬声App

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

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

3天内不再提示
电子发烧友网>电子资料下载>嵌入式开发>嵌入式的参数存储诀窍分享

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

2017-10-13 | rar | 0.11 MB | 次下载 | 1积分

资料介绍

  分享到:标签嵌入式 工业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大小的数组,如果这个值太大,会超过栈的大小,使得内存溢出。因此存储区不能开辟的太大。
  
  四、总结
  这种方式使用简便,尤其是在更新变量值时,根据存储的变量地址更新相应的值。其实其本质与我们使用变量名来标记不同的变量是一样的。不过也有缺点:
  首先其同时存储变量的地址与变量的值,相当于多使用一倍的存储空间;
  像上面的注意事项中说的,存储区不能开辟的过大,否则会使临时数组超过栈的大小。
 
下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1PC3103 低功耗电流模式PWM控制器技术手册
  2. 1.23 MB   |  3次下载  |  免费
  3. 2L7805CV TO-220三端稳压IC规格书
  4. 0.71 MB   |  1次下载  |  免费
  5. 3LoRa2021 全频段无线通讯模块规格书
  6. 814.22 KB  |  1次下载  |  免费
  7. 4L7812CV TO-220三端稳压IC规格书
  8. 1.35 MB   |  次下载  |  免费
  9. 5L7815CV TO-220三端稳压IC规格书
  10. 1.48 MB   |  次下载  |  免费
  11. 6N-12电子倾斜仪指南
  12. 0.24 MB   |  次下载  |  10 积分
  13. 7基于CP500S扫描测头的三坐标测量系统:复杂曲面零件解决方案
  14. 0.35 MB   |  次下载  |  免费
  15. 8STM32H747xI/G 英文数据手册
  16. 5.09 MB   |  次下载  |  免费

本月

  1. 1PFC电路与BOOST电路设计实例分享
  2. 1.83 MB   |  18次下载  |  4 积分
  3. 2电源测试报告-基于 国民技术 N32L406 和杰华特 JW3376+3330 的 BMS 方案
  4. 6.47 MB  |  17次下载  |  免费
  5. 3世平基于灵动微 SPIN560C 的低压无刷电机应用方案
  6. 10.93 MB  |  11次下载  |  免费
  7. 4900MHz全双工无线发射器参考设计原理图资料
  8. 0.40 MB   |  6次下载  |  免费
  9. 5PWM控制器的控制方法
  10. 0.39 MB   |  3次下载  |  4 积分
  11. 6900MHz全双工无线发射器参考设计
  12. 0.15 MB   |  3次下载  |  1 积分
  13. 7美的电磁炉TM-S1-20B PN8124F+CHK S009资料图
  14. 0.28 MB   |  3次下载  |  10 积分
  15. 8FS313B USB 的 PD和QC 快充协议电压诱骗控制器规格书
  16. 2.61 MB   |  3次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935134次下载  |  10 积分
  3. 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
  4. 1.48MB  |  420064次下载  |  10 积分
  5. 3Altium DXP2002下载入口
  6. 未知  |  233089次下载  |  10 积分
  7. 4电路仿真软件multisim 10.0免费下载
  8. 340992  |  191424次下载  |  10 积分
  9. 5十天学会AVR单片机与C语言视频教程 下载
  10. 158M  |  183352次下载  |  10 积分
  11. 6labview8.5下载
  12. 未知  |  81602次下载  |  10 积分
  13. 7Keil工具MDK-Arm免费下载
  14. 0.02 MB  |  73819次下载  |  10 积分
  15. 8LabVIEW 8.6下载
  16. 未知  |  65991次下载  |  10 积分