,,,
(1.齊魯工業大學(山東省科學院),濟南 250353;2.山東省科學院自動化研究所;3.山東省汽車電子技術重點實驗室)
在嵌入式系統的軟件設計中,要根據具體應用要求和系統資源大小,選擇合適的嵌入式操作系統,根據應用邏輯劃分任務,然后利用操作系統提供的一系列API建立任務隊列,以消息或事件的形式進行任務間通信,實現任務調度[1],這種方式可以讓開發人員將精力集中在應用邏輯的開發上,不僅可以實現軟件的模塊化,還可以靈活地進行修改和維護。
在這種方式下,MCU上電初始化時首先建立任務隊列,為每個任務設定合適的優先級,并分配一定的堆棧用于存儲任務上下文。在系統運行階段,系統滴答、發送消息或事件、各種系統中斷都會觸發任務調度。執行任務切換時,首先將當前任務的上下文數據保存到任務堆棧中,然后將新任務堆棧恢復到MCU各類寄存器和系統棧中[2],根據新的PC(程序計數器)指針執行新任務。每個任務堆棧都會消耗寶貴的RAM資源,而且系統運行階段存在大量頻繁的中斷時,上下文的存儲和恢復會極大消耗MCU的計算資源,因此,只有在RAM資源豐富、主頻高的高端MCU中才選擇使用操作系統。在那些由于成本限制只能選擇RAM資源較小、主頻較低的中低端MCU的嵌入式系統的軟件設計中,只能采用不加操作系統的裸機方式。
在不帶操作系統的裸機嵌入式系統中,軟件系統在一個主循環體中運行。MCU循環調用由各種軟件模塊組成的主循環體,各個軟件模塊不存在各自的任務堆棧,共享一個系統棧。……