图解Protothreads
0赞
图解Protothreads
-- 微控制器中基于协程的实时协作多任务方法 (2)
在对Protothreads的简化做进一步的引申前,对其机制作深入理解是有好处的。
我发现,Protothreads与我30年前构思并使用的一种实时多任务编程方法([1]的第三部分--软件设计思想)异曲同工。Protothreads语句不多,但宏套宏,初读起来有点令人费解。我就借文[1]中的两张图来图解Protothreads。
[1]文图2:
对应Protothreads,在图中[ * ]的地方,使用PT_WAIT_UNTIL(pt, condition)。
[1]文图3:
看看框图右边的
n -> Rx |
-> EXIT |
是否就是 Protothreads的“ LC_SET(Rx) ; return ; ”?
框图左侧各TASK入口的地方,是否就是Protothread的“ LC_RESUME(Rx)的 switch-case ”?
不用多少文字,Protothreads的机制借图就已一目了然。
图2、图3和Protothreads实质上是表示了用同一种方法解决问题的不同手段。Protothreads只是这种方法的C语言实现。提出过这种方法的,还可以找到[2]。不过,我们国人提出的这种方法,都还没有提升到系统的高度。
这种方法,实际上还没有一个恰当的名称。我提议,不妨把它称为“基于协程的实时协作多任务方法”,简称为“协程多任务方法”,各位朋友认为是否合适?参考Simon Tatham [3]的协程(Coroutine)的叫法,Protothreads可看作是“协程多任务方法”的C实现(Implementation in C)。
我的这种方法,三十年来经历了MCS-48、MCS-51单片机,也使用于其他好几种小型微控制器,开发了不少产品。由于汇编语言的多样性和灵活性,积累了不少的变通方法。由于如今的嵌入式系统开发人员,已经不再喜欢和汇编打交道了,所以,后面只将一些能用C表现的方法写出来,以抛砖引玉。
[1] 朱丰毅等,单片微机在塑料带捆扎机中的应用,《自动化仪表》 1986年第12期, 下载 本地单片微机在塑料带捆扎机中的应用.pdf
[2] 薛天宇,一种实时多任务系统软件设计方法,《电子技术应用》 2001年第4期
[3] Simon Tatham,Coroutines in C ,http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html
===
fy_zhu
2013-02-14 SV_CA