單片機多任務(wù)框架設計
單片機應用廣泛,內部資源搭配豐富。雖然豐儉由人,但是在單片機選型的時(shí)候,我們往往會(huì )選擇性?xún)r(jià)比相對較高的。選定了單片機,程序設計工作量也不小。如何方便快捷的移植、開(kāi)發(fā)調試以及維護,可以實(shí)現是程序設計人員追求的縮短設計周期的目標。
本文引用地址:http://dyxdggzs.com/article/202111/429669.htm1 框架分析
跑系統的單片機可以更有效支持多任務(wù),完成更加復雜的任務(wù),但需要更大的存儲空間用于系統程序和用戶(hù)程序;裸跑的單片機只能進(jìn)行單任務(wù),對存儲空間需求較低。在這里主要研究一種多任務(wù)程序框架設計,讓裸奔的單片機跑出操作系統的感覺(jué),單片機雖然是裸機奔跑,但是往往現實(shí)的需要決定了我們必須跑出操作系統的姿態(tài)——多任務(wù)程序。
系統實(shí)現多任務(wù),最重要的特點(diǎn)是分時(shí)和消息傳遞與處理。引用一個(gè)網(wǎng)友的總結:stateMachine +timerTick + queue。
queue,在設計框架時(shí)需要設計一個(gè)消息隊列貫穿整個(gè)系統,把這個(gè)隊列機制做成通用模塊,在不同的程序執行模塊中調用。消息隊列用于緩沖事件,事件不知道什么時(shí)候會(huì )到來(lái),也不能保證來(lái)了就能迅速得到處理,使用消息隊列,可以保證每個(gè)事件都能處理到。消息通常分為兩種類(lèi)型:①外部事件收集,然后存儲到隊列,如按鍵、IO 中斷、時(shí)鐘任務(wù)等硬件發(fā)出;②在任務(wù)處理過(guò)程中,一個(gè)任務(wù)觸發(fā)新的任務(wù),例如在藍牙遙控器中,接收解析串口數據的任務(wù)中發(fā)出按鍵消息。timerTick,系統的時(shí)鐘基準。用一個(gè)定時(shí)器來(lái)建立通用定時(shí)器任務(wù),管理不同任務(wù)相關(guān)的多個(gè)定時(shí)器,在定時(shí)到達時(shí),由定時(shí)器任務(wù)發(fā)出消息。
stateMachine,任務(wù)收到消息后,根據當前狀態(tài)決定如何處理消息。
2 框架設計
我們以包含按鍵開(kāi)關(guān)一個(gè)定時(shí)1 s 的LED 燈閃爍為例,示例包含框架的全部?jì)热荨?/p>
圖1是程序流程圖。
圖1 程序流程
首先是消息隊列、時(shí)鐘任務(wù)、消息的定義:
其次是從頂層主程序設計開(kāi)始,再到各功能模塊的設計:
1)頂層主程序設計,系統開(kāi)始進(jìn)行硬件初始化、任務(wù)初始化、時(shí)鐘初始化;然后在1 個(gè)循環(huán)中不停地進(jìn)行循環(huán)事件收集、時(shí)間事件收集和處理、消息隊列時(shí)間處理。
2)在時(shí)鐘基準的設置上,建立1 個(gè)1 ms 的定時(shí)器,在定時(shí)器中斷里判斷開(kāi)啟的定時(shí)任務(wù)是否發(fā)生,滿(mǎn)足條件設置定時(shí)標志,同時(shí)關(guān)閉此項定時(shí)任務(wù)。
3)循環(huán)事件收集:在循環(huán)中判斷是否有按鍵按下,如有按鍵按下,發(fā)送按鍵消息。
4)時(shí)間事件收集:判斷定時(shí)服務(wù)里設置的定時(shí)標志做相關(guān)的時(shí)間事件處理。
5)消息隊列處理:判斷消息隊列是否為空,當不為空時(shí)進(jìn)行消息處理。
3 任務(wù)添加
如何根據實(shí)際應用的需要在主體結構中加入新的任務(wù),如下以串口通信為例。
1)添加消息定義:在消息定義enumEventList 里面加入串口功能定義。
2)添加消息收集程序:在串口中斷里接收數據,并把數據寫(xiě)到串口數據緩沖器,在循環(huán)事件收集里面進(jìn)行串口數據分析,根據收到的數據完整性和協(xié)議分析,發(fā)出串口功能的消息到消息隊列。
3)添加消息處理程序:在消息隊列處理里面加入串口功能對應的處理功能。
4 結束語(yǔ)
整體看來(lái)我們的程序框架就成了通用的模板了,根據自己選定的MCU,選個(gè)定時(shí)器,再添加自己的事件收集、事件處理以及時(shí)間任務(wù)即可,非常靈活方便實(shí)用。
參考文獻:
[1] 李寧.基于MDK的STM32處理器開(kāi)發(fā)應用[M].北京:北京航空航天大學(xué)出版社,2008.
[2] LABROSSE J J.嵌入式實(shí)時(shí)操作系統μC/OS-II[M].邵貝貝,等,譯.北京:北京航空航天大學(xué)出版社,2003.
[3] 孫涵芳,徐愛(ài)卿.MCS-51/96系列單片機原理與應用[M].北京:北京航空航天大學(xué)出版社,1988.
[4] 郭天祥.新概念51單片機C語(yǔ)言教程:入門(mén)、提高、開(kāi)發(fā)、拓展全攻略.北京:電子工業(yè)出版社,2009.
[5] 徐愛(ài)鈞.Keil C51單片機高級語(yǔ)言應用編程技術(shù).北京:電子工業(yè)出版社,2015.
(本文來(lái)源于《電子產(chǎn)品世界》雜志2021年10月期)
評論