flash多进程写操作
1 应用场景介绍
硬件条件:使用stm32 MCU
软件条件:协议栈应用
协议栈简单介绍如下:
类似于OSI七层模型,所涉及的协议栈包括应用层,网络层,链路层,物理层,如下图:
在协议栈应用层,网络层和链路层都会产生数据,但是大部分的数据是网络层产生的,数据管理尽量放在某一层统一管理。数据的管理无外乎读,写两个操作,读数据在哪一层都可以,只要能得到flash地址,不管在哪一层,都能读到预定的数据。写数据则不然,尽量放在同一层统一写入,否则在多任务读写时,就会存在问题。
2 应用方法
多任务,多进程进行写数据的时候,也得是进程之间有个先后顺序,如果在多个层分别进行数据的写入处理,有可能是处理出现错误,或者写入数据无效。解释如下:
因为flash的数据写入特性是“先擦除再写入”,即先把flash中的数据读入RAM中,之后擦除Flash中的数据,在RAM中进行相应处理之后,再把数据重新写入Flash。
理解了flash的读写操作之后,再来看数据放在多个层写入为什么会产生数据错误或者数据无效。举个栗子:
在应用层和网络层都有数据写入,而且是对同一数据的操作。当网络层把Flash中这个数据读入RAM中后,cpu转去执行应用层对于同一数据的修改并且写入操作,写操作执行完后,cpu又返回来执行网络层的写操作。如此一来,应用层对于该数据的修改已经被网络层写入的数据覆盖,也就是说应用层对该数据的修改无效。
所以说,对数据的处理,特别是写操作,尽量放在同一层进行处理。
进程是具有优先级的,上述问题也可以使用进程的优先级进行保护,这仅适用于少量的数据操作,如果使用大量的高优先级进程,相当于对数据的处理很多都设置为高优先级,也无法起到保护作用。
所以,对数据处理最好的办法是放在同一层进行处理。
不当之处,请多指教,感谢!
最新文章
- [.NET] WebApi 生成帮助文档及顺便自动创建简单的测试工具
- Cesium原理篇:4Web Workers剖析
- php学习笔记之wamp安装配置
- 编译安装php
- 标准电流信号为什么是4-20MA?(网络摘录)
- java se基础
- xml转array
- Netty实现服务端客户端长连接通讯及心跳检测
- windows Server 2008 IIS7 503错误解决方案
- ocx控件手动修改clsid的方法
- 深入浅出数据结构C语言版(2)——简要讨论算法的时间复杂度
- 解决WebUploader在谷歌浏览器中反应缓慢迟钝
- Winform 下载服务器安装包并安装
- 对于Swift的Enum,文档上没有说的
- 【面试笔试算法】Problem 9: 腾讯2016年研发实习笔试题:最长回文子串
- ECMA Script 6_数组的扩展_扩展运算符
- PL/SQL变量的作用域和可见性
- SQLalchemy 字段类型
- Intel支持八九代酷睿的B365芯片组将登场亮相
- STL——配接器、常用算法使用
热门文章
- ubuntu 18.04安装jdk8和eclipse
- 【Leetcode_easy】806. Number of Lines To Write String
- git 提交大小超过100M
- 【POJ - 3268 】Silver Cow Party (最短路 Dijkstra算法)
- 最新 花椒直播java校招面经 (含整理过的面试题大全)
- Anaconda是什么?Anconda下载安装教程(1)
- Java面试 - 在Java中, 既然构造方法是一个方法,那么为什么不使用void 定义呢?
- Nginx 开发者文档翻译 - 介绍
- [转帖]为微软效力15年的微软前员工解释Windows 10为什么问题这么多
- WUST 设计模式 实验一 单例模式的应用