朱工

早年从事单片机、实时控制系统产品设计及编程。目前耄耋之年开始学习AI技术。

图解Protothreads

0
阅读(4274)


图解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