随笔- 16  评论- 2  文章- 0 

flash多进程写操作

1 应用场景介绍

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

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

2 应用方法

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

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

posted on 2019-05-02 22:33 shell_nut 阅读(...) 评论(...) 编辑 收藏