利用Protothread實現實時多任務系統
設計思路:
本文引用地址:http://cqxgywz.com/article/85487.htm將TaskB和TaskC分成若干步,每步運行時間不超過10 ms(這個時間可視系統需求而定,例如TaskA若為40 ms內響應,則每步可擴至20 ms)。任務以3個Protothread的方式運行。首先執行TaskA,在TaskA執行完成1次后,釋放執行權限,讓TaskB和TaskC執行。TaskB或TaskC在每執行1步之前檢查運行時間,一旦發現30 ms內不夠執行1步時,阻塞運行,讓出執行權限給TaskA。同樣,TaskB和TaskC的調度關系也類似,先運行TaskB,完成時釋放執行權限,讓TaskC執行;TaskC在每執行1步之前檢查運行時間,若發現200 ms內不夠執行1步時,阻塞運行,讓出執行權限重新交給TaskB。
源程序(Task0TimeCounter、Task1TimeCounter為計數器,每毫秒加1):





模擬運行結果如表1所列。運行結果顯示,3個任務的運行情況完全滿足系統的設計要求。從資源需求來看,完成此例的系統設計,共需要12個字節的RAM空間。筆者進一步對Protothread定義文件做了少許修改和優化,最終僅耗費6個字節。
表1 模擬運行結果運行

結語
本文旨在解決資源緊張型應用的、多任務環境下的實時性問題。 通過借助Protothread的阻塞運行機制, 成功實現了低開銷的實時多任務系統。
參考文獻
[1] Adam Dunkels, Oliver Schmidt, Thiemo Voigt. Using Protothreads for Sensor Node Programming[C]. REALWSN'05 Workshop on RealWorld Wireless Sensor Networks, Stockholm, Sweden, June 2005
[2] Adam Dunkels, Oliver Schmidt, Thiemo Voigt, et al. Protothreads: Simplifying EventDriven Programming of MemoryConstrained Embedded Systems[C]. In Proceedings of the Fourth ACM Conference on Embedded Networked Sensor Systems (SenSys 2006), Boulder, Colorado, USA, November 2006.
[3] Labrosse Jean J. MicroC/OSII The Real Time Kernel Second Edition[M]. CMP Books, CMP Media.
[4] 冉全. 單片機中基于多線程機制的實時多任務研究[J] .微型機與應用,2003(8): 39-40.
linux操作系統文章專題:linux操作系統詳解(linux不再難懂)








評論