對于單片機程序來說,大家都不陌生,但是真正使用架構,考慮架構的恐怕并不多,隨著程序開發的不斷增多,架構是非常必要的。
一、時間片輪詢法
介于前后臺順序執行法和操作系統之間的一種程序架構設計方案。
該設計方案需能幫助嵌入式軟件開發者更上一層樓,在嵌入式軟件開發過程中,若遇到以下幾點,那么該設計方案可以說是最優選擇,適用于程序較復雜的嵌入式系統;
目前的需求設計需要完全沒有必要上操作系統。
任務函數無需時刻執行,存在間隔時間(比如按鍵,一般情況下,都需要軟件防抖,初學者的做法通常是延時10ms左右再去判斷,但10ms極大浪費了CPU的資源,在這段時間內CPU完全可以處理很多其他事情)
實時性有一定的要求。
該設計方案需要使用一個定時器,一般情況下定時1ms即可(定時時間可隨意定,但中斷過于頻繁效率就低,中斷太長,實時性差),因此需要考慮到每個任務函數的執行時間,建議不能超過1ms(能通過程序優化縮短執行時間則最好優化,如果不能優化的,則必須保證該任務的執行周期必須遠大于任務所執行的耗時時間),同時要求主循環或任務函數中不能存在毫秒級別的延時。
以下介紹兩種不同的實現方案,分別針對無函數指針概念的朋友和想進一步學習的朋友。
1、無函數指針的設計方式
2、含函數指針的設計方式
二、操作系統
嵌入式操作系統EOS(Embedded OperatingSystem)是一種用途廣泛的系統軟件,過去它主要應用于工業控制和國防系統領域。
對于單片機來說,比較常用的有UCOS、FreeRTOS、RT-Thread Nano和RTX 等多種搶占式操作系統(其他如Linux等操作系統不適用于單片機)
操作系統和“時間片輪詢法”,在任務執行方面來說,操作系統對每個任務的耗時沒有過多的要求,需要通過設置每個任務的優先級,在高優先級的任務就緒時,會搶占低優先級的任務;操作系統相對復雜,因此這里不詳細介紹了。
關于如何選擇合適的操作系統(uCOS、FreeRTOS、RTThread、RTX等RTOS的對比之特點:
uCOS:網上資料豐富,非常適合學習,但是在產品上使用則需要收費。
FreeRTOS:使用免費,因此很多產品都在用。
RT-Thread:國產物聯網操作系統,有著十分豐富的組件,也免費,資料:RT-Thread文檔中心。
RTX:為ARM和Cortex-M設備設計的免版稅,確定性的實時操作系統。
借網上一張對比圖:
三、前后臺順序執行法
這是初學者們常用的程序框架設計方案,不用考慮太多東西,代碼簡單,或者對系統的整體實時性和并發性要求不高;初始化后通過while(1){}或for(;;){}循環不斷調用自己編寫完成的函數,也基本不考慮每個函數執行所需要的時間,大部分情況下函數中或多或少都存在毫秒級別的延時等待。
優點:對于初學者來說,這是最容易也是最直觀的程序架構,邏輯簡單明了,適用于邏輯簡單,復雜度比較低的軟件開發。
缺點:實時性低,由于每個函數或多或少存在毫秒級別的延時,即使是1ms,也會造成其他函數間隔執行時間的不同,雖然可通過定時器中斷的方式,但是前提是中斷執行函數花的時間必須短。當程序邏輯復雜度提升時,會導致后來維護人員的大腦混亂,很難理清楚該程序的運行狀態。
審核編輯:湯梓紅
-
單片機
+關注
關注
6032文章
44516瀏覽量
633030 -
程序
+關注
關注
116文章
3777瀏覽量
80851 -
嵌入式軟件
+關注
關注
4文章
240瀏覽量
26618 -
代碼
+關注
關注
30文章
4748瀏覽量
68355
原文標題:嵌入式軟件常用的幾種代碼架構
文章出處:【微信號:談思實驗室,微信公眾號:談思實驗室】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論