1 应用场景介绍

  硬件条件:使用stm32 MCU
  软件条件:协议栈应用
  协议栈简单介绍如下:
  类似于OSI七层模型,所涉及的协议栈包括应用层,网络层,链路层,物理层,如下图:

  在协议栈应用层,网络层和链路层都会产生数据,但是大部分的数据是网络层产生的,数据管理尽量放在某一层统一管理。数据的管理无外乎读,写两个操作,读数据在哪一层都可以,只要能得到flash地址,不管在哪一层,都能读到预定的数据。写数据则不然,尽量放在同一层统一写入,否则在多任务读写时,就会存在问题。

2 应用方法

  多任务,多进程进行写数据的时候,也得是进程之间有个先后顺序,如果在多个层分别进行数据的写入处理,有可能是处理出现错误,或者写入数据无效。解释如下:
  因为flash的数据写入特性是“先擦除再写入”,即先把flash中的数据读入RAM中,之后擦除Flash中的数据,在RAM中进行相应处理之后,再把数据重新写入Flash。
  理解了flash的读写操作之后,再来看数据放在多个层写入为什么会产生数据错误或者数据无效。举个栗子:
  在应用层和网络层都有数据写入,而且是对同一数据的操作。当网络层把Flash中这个数据读入RAM中后,cpu转去执行应用层对于同一数据的修改并且写入操作,写操作执行完后,cpu又返回来执行网络层的写操作。如此一来,应用层对于该数据的修改已经被网络层写入的数据覆盖,也就是说应用层对该数据的修改无效。
  所以说,对数据的处理,特别是写操作,尽量放在同一层进行处理。
  进程是具有优先级的,上述问题也可以使用进程的优先级进行保护,这仅适用于少量的数据操作,如果使用大量的高优先级进程,相当于对数据的处理很多都设置为高优先级,也无法起到保护作用。
  所以,对数据处理最好的办法是放在同一层进行处理。

  不当之处,请多指教,感谢!

最新文章

  1. [.NET] WebApi 生成帮助文档及顺便自动创建简单的测试工具
  2. Cesium原理篇:4Web Workers剖析
  3. php学习笔记之wamp安装配置
  4. 编译安装php
  5. 标准电流信号为什么是4-20MA?(网络摘录)
  6. java se基础
  7. xml转array
  8. Netty实现服务端客户端长连接通讯及心跳检测
  9. windows Server 2008 IIS7 503错误解决方案
  10. ocx控件手动修改clsid的方法
  11. 深入浅出数据结构C语言版(2)——简要讨论算法的时间复杂度
  12. 解决WebUploader在谷歌浏览器中反应缓慢迟钝
  13. Winform 下载服务器安装包并安装
  14. 对于Swift的Enum,文档上没有说的
  15. 【面试笔试算法】Problem 9: 腾讯2016年研发实习笔试题:最长回文子串
  16. ECMA Script 6_数组的扩展_扩展运算符
  17. PL/SQL变量的作用域和可见性
  18. SQLalchemy 字段类型
  19. Intel支持八九代酷睿的B365芯片组将登场亮相
  20. STL——配接器、常用算法使用

热门文章

  1. ubuntu 18.04安装jdk8和eclipse
  2. 【Leetcode_easy】806. Number of Lines To Write String
  3. git 提交大小超过100M
  4. 【POJ - 3268 】Silver Cow Party (最短路 Dijkstra算法)
  5. 最新 花椒直播java校招面经 (含整理过的面试题大全)
  6. Anaconda是什么?Anconda下载安装教程(1)
  7. Java面试 - 在Java中, 既然构造方法是一个方法,那么为什么不使用void 定义呢?
  8. Nginx 开发者文档翻译 - 介绍
  9. [转帖]为微软效力15年的微软前员工解释Windows 10为什么问题这么多
  10. WUST 设计模式 实验一 单例模式的应用