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