flash多进程写操作
Posted misterxu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flash多进程写操作相关的知识,希望对你有一定的参考价值。
1 应用场景介绍
??硬件条件:使用stm32 MCU
??软件条件:协议栈应用
??协议栈简单介绍如下:
??类似于OSI七层模型,所涉及的协议栈包括应用层,网络层,链路层,物理层,如下图:
??在协议栈应用层,网络层和链路层都会产生数据,但是大部分的数据是网络层产生的,数据管理尽量放在某一层统一管理。数据的管理无外乎读,写两个操作,读数据在哪一层都可以,只要能得到flash地址,不管在哪一层,都能读到预定的数据。写数据则不然,尽量放在同一层统一写入,否则在多任务读写时,就会存在问题。
2 应用方法
??多任务,多进程进行写数据的时候,也得是进程之间有个先后顺序,如果在多个层分别进行数据的写入处理,有可能是处理出现错误,或者写入数据无效。解释如下:
??因为flash的数据写入特性是“先擦除再写入”,即先把flash中的数据读入RAM中,之后擦除Flash中的数据,在RAM中进行相应处理之后,再把数据重新写入Flash。
??理解了flash的读写操作之后,再来看数据放在多个层写入为什么会产生数据错误或者数据无效。举个栗子:
??在应用层和网络层都有数据写入,而且是对同一数据的操作。当网络层把Flash中这个数据读入RAM中后,cpu转去执行应用层对于同一数据的修改并且写入操作,写操作执行完后,cpu又返回来执行网络层的写操作。如此一来,应用层对于该数据的修改已经被网络层写入的数据覆盖,也就是说应用层对该数据的修改无效。
??所以说,对数据的处理,特别是写操作,尽量放在同一层进行处理。
??进程是具有优先级的,上述问题也可以使用进程的优先级进行保护,这仅适用于少量的数据操作,如果使用大量的高优先级进程,相当于对数据的处理很多都设置为高优先级,也无法起到保护作用。
??所以,对数据处理最好的办法是放在同一层进行处理。
??不当之处,请多指教,感谢!
以上是关于flash多进程写操作的主要内容,如果未能解决你的问题,请参考以下文章
python采用 多进程/多线程/协程 写爬虫以及性能对比,牛逼的分分钟就将一个网站爬下来!