zoukankan      html  css  js  c++  java
  • flash多进程写操作

    1 应用场景介绍

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

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

    2 应用方法

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

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

  • 相关阅读:
    游记-HNOI2019
    题解-COCI2015Norma
    题解-Codeforces671D Roads in Yusland
    题解-POI2014 Supercomputer
    笔记-莫队的强制在线
    题解-HAOI2018全套
    题解-UOJ455 雪灾与外卖
    题解-Codeforces917D Stranger Trees
    题解-AtCoder Code-Festival2017 Final-J Tree MST
    Linux 配置svn
  • 原文地址:https://www.cnblogs.com/MisterXu/p/10803693.html
Copyright © 2011-2022 走看看