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

嵌入式軟件開發(fā)中三種程序架構(gòu)

嵌入式開發(fā)中要用的三種程序架構(gòu)~

嵌入式軟件開發(fā)三種程序架構(gòu)詳解

嵌入式開發(fā)中軟件架構(gòu)存在的意義

嵌入式開發(fā)|嵌入式軟件框架《一》常用的軟件框架介紹與選擇

嵌入式軟件開發(fā)之程序架構(gòu)(一)

三種常見嵌入式開發(fā)程序架構(gòu)

評論