利用Protothread實(shí)現實(shí)時(shí)多任務(wù)系統
設計思路:
本文引用地址:http://dyxdggzs.com/article/85487.htm將TaskB和TaskC分成若干步,每步運行時(shí)間不超過(guò)10 ms(這個(gè)時(shí)間可視系統需求而定,例如TaskA若為40 ms內響應,則每步可擴至20 ms)。任務(wù)以3個(gè)Protothread的方式運行。首先執行TaskA,在TaskA執行完成1次后,釋放執行權限,讓TaskB和TaskC執行。TaskB或TaskC在每執行1步之前檢查運行時(shí)間,一旦發(fā)現30 ms內不夠執行1步時(shí),阻塞運行,讓出執行權限給TaskA。同樣,TaskB和TaskC的調度關(guān)系也類(lèi)似,先運行TaskB,完成時(shí)釋放執行權限,讓TaskC執行;TaskC在每執行1步之前檢查運行時(shí)間,若發(fā)現200 ms內不夠執行1步時(shí),阻塞運行,讓出執行權限重新交給TaskB。
源程序(Task0TimeCounter、Task1TimeCounter為計數器,每毫秒加1):
模擬運行結果如表1所列。運行結果顯示,3個(gè)任務(wù)的運行情況完全滿(mǎn)足系統的設計要求。從資源需求來(lái)看,完成此例的系統設計,共需要12個(gè)字節的RAM空間。筆者進(jìn)一步對Protothread定義文件做了少許修改和優(yōu)化,最終僅耗費6個(gè)字節。
表1 模擬運行結果運行
結語(yǔ)
本文旨在解決資源緊張型應用的、多任務(wù)環(huán)境下的實(shí)時(shí)性問(wèn)題。 通過(guò)借助Protothread的阻塞運行機制, 成功實(shí)現了低開(kāi)銷(xiāo)的實(shí)時(shí)多任務(wù)系統。
參考文獻
[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] 冉全. 單片機中基于多線(xiàn)程機制的實(shí)時(shí)多任務(wù)研究[J] .微型機與應用,2003(8): 39-40.
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論