資料介紹
前言
在嵌入式軟件開(kāi)發(fā),包括單片機(jī)開(kāi)發(fā)中,軟件架構(gòu)對(duì)于開(kāi)發(fā)人員是一個(gè)必須認(rèn)真考慮的問(wèn)題。軟件架構(gòu)對(duì)于系統(tǒng)整體的穩(wěn)定性和可靠性是非常重要的,一個(gè)合適的軟件架構(gòu)不僅結(jié)構(gòu)清晰,并且便于開(kāi)發(fā)。我相信在嵌入式或單片機(jī)軟件開(kāi)發(fā)的初期大多數(shù)開(kāi)發(fā)者采用的都是簡(jiǎn)單的前后臺(tái)順序執(zhí)行架構(gòu)。在嵌入式軟件開(kāi)發(fā)中,程序架構(gòu)主要分為三種,本篇文章將對(duì)這三種程序架構(gòu)做出詳解。
1、軟件架構(gòu)存在的意義
可以說(shuō)一個(gè)好的程序架構(gòu),是一個(gè)有經(jīng)驗(yàn)的工程師和一個(gè)初學(xué)者的分水嶺。軟件架構(gòu)對(duì)于開(kāi)發(fā)人員是友好的,你希望先執(zhí)行什么任務(wù)后執(zhí)行什么任務(wù),或者這一個(gè)時(shí)間點(diǎn)執(zhí)行什么任務(wù)下一個(gè)執(zhí)行什么任務(wù),又或者什么事件會(huì)同步到某個(gè)任務(wù)等等,在不同的軟件架構(gòu)下,解決上述問(wèn)題的具體方法都是有所區(qū)別的。
軟件架構(gòu)對(duì)開(kāi)發(fā)者最大的幫助是:幫助開(kāi)發(fā)者掌控整個(gè)工程的框架,當(dāng)你熟練使用其中某一個(gè)程序架構(gòu)后,對(duì)于系統(tǒng)中出現(xiàn)的bug你一定能夠快速的定位并解決。當(dāng)然,我建議要根據(jù)需要選擇合適的軟件架構(gòu)進(jìn)行開(kāi)發(fā),具體原因在文章后面會(huì)進(jìn)行介紹。
2、深入介紹三種不同的程序架構(gòu)
三種常用的軟件架構(gòu)有:順序執(zhí)行的前后臺(tái)系統(tǒng)、時(shí)間片輪詢系統(tǒng)和多任務(wù)操作系統(tǒng)。為了讓大家有一個(gè)更為清晰的認(rèn)識(shí),我分別用三種軟件架構(gòu)對(duì)一個(gè)實(shí)例進(jìn)行介紹說(shuō)明。這個(gè)實(shí)例如下:它有4個(gè)任務(wù),這4個(gè)任務(wù)為按鍵掃描、聲光報(bào)警、顯示屏刷新和超聲波測(cè)距。這個(gè)實(shí)例的具體功能是通過(guò)按鍵設(shè)置測(cè)量距離的閾值,當(dāng)測(cè)距距離低于設(shè)置的閾值時(shí),觸發(fā)聲光報(bào)警并且將測(cè)量距離實(shí)時(shí)顯示在顯示屏上(這個(gè)應(yīng)用是汽車倒車?yán)走_(dá)的具體體現(xiàn))。
2.1順序執(zhí)行的前后臺(tái)系統(tǒng)
在順序執(zhí)行的前后臺(tái)系統(tǒng)中,我會(huì)把鍵盤掃描用查詢的方式放在while(1)中,而顯示屏刷新和超聲波測(cè)距使用中斷,在中斷服務(wù)函數(shù)中獲取測(cè)量距離后進(jìn)行顯示,在主函數(shù)的循環(huán)中進(jìn)行按鍵的檢測(cè),聲光處理也放在主循環(huán)中。這樣整個(gè)程序就以變量標(biāo)志的同步方式在主循環(huán)和后臺(tái)中斷中執(zhí)行,對(duì)應(yīng)的程序代碼如圖所示:


這種架構(gòu)的優(yōu)點(diǎn)是使用簡(jiǎn)單易于理解,而缺點(diǎn)是每個(gè)任務(wù)所占的CPU時(shí)間過(guò)長(zhǎng)的話,會(huì)導(dǎo)致程序的實(shí)時(shí)性能差,就比如按鍵的檢測(cè)等。
2.2時(shí)間片輪詢系統(tǒng)和多任務(wù)操作系統(tǒng)
時(shí)間片輪詢法實(shí)際上通常出現(xiàn)在操作系統(tǒng)中,也就是說(shuō)他屬于操作系統(tǒng),但在這里所說(shuō)的是基于前后臺(tái)系統(tǒng)的時(shí)間片輪詢。時(shí)間片輪詢法的實(shí)質(zhì)其實(shí)就是選出一個(gè)定時(shí)器,沒(méi)進(jìn)一次定時(shí)中斷對(duì)計(jì)數(shù)值進(jìn)行自加,在主循環(huán)中根據(jù)這個(gè)計(jì)數(shù)值執(zhí)行任務(wù),這個(gè)計(jì)數(shù)值也就是任務(wù)輪詢的時(shí)間片。在這個(gè)實(shí)例中,如果采用時(shí)間片輪詢系統(tǒng)的話,首先選用主控芯片的任一定時(shí)器,定時(shí)器定時(shí)時(shí)間周期由我們決定,為了保證實(shí)時(shí)性和運(yùn)行效率,這個(gè)值通常取10ms、30ms、50ms等,我會(huì)將按鍵掃描輪值值設(shè)置為20ms,因?yàn)榘存I抖動(dòng)的時(shí)長(zhǎng)一般為20ms,這樣處理既達(dá)到了消抖的目的,又不會(huì)漏掉按鍵的檢測(cè);而顯示屏的刷新設(shè)置為30ms,如果你覺(jué)得刷新反應(yīng)慢了也可以修改這一輪詢值得到改善;而超聲波測(cè)距的輪詢值設(shè)置為100ms,即每隔100模式觸發(fā)測(cè)距一次,這個(gè)測(cè)距頻率已經(jīng)能夠滿足大多數(shù)的情況了。
程序代碼如下:


可以看出時(shí)間片輪詢法相比順序執(zhí)行還是有很大優(yōu)勢(shì)的,既有順序執(zhí)行法的優(yōu)點(diǎn),也有操作系統(tǒng)的部分優(yōu)點(diǎn)。
2.3多任務(wù)操作系統(tǒng)
操作系統(tǒng)的本身是一個(gè)比較復(fù)雜的東西,任務(wù)的管理和調(diào)度實(shí)現(xiàn)的底層是很復(fù)雜和困難的。但是呢,我們一般都是把操作系統(tǒng)本身作為一個(gè)工具一個(gè)平臺(tái),我們的目的是使用它的功能而不是開(kāi)發(fā)一個(gè)操作系統(tǒng)。我使用過(guò)ucos和freertos小型的實(shí)時(shí)操作系統(tǒng),也使用過(guò)Linux大型的操作系統(tǒng),有了操作系統(tǒng),不管是對(duì)于程序的穩(wěn)定性和開(kāi)發(fā)的效率都會(huì)好很多。我們?cè)谑褂貌僮飨到y(tǒng)的時(shí)候更多的需要去學(xué)習(xí)和理解它的一些調(diào)度和通信的方式。實(shí)際上真正能使用操作系統(tǒng)的人并不多,反而是跑裸機(jī)的占大多數(shù),這也和產(chǎn)品的具體要求有關(guān),很多簡(jiǎn)單的系統(tǒng)只需要裸機(jī)即可滿足。
在這里本我不過(guò)多的介紹操作系統(tǒng)本身,因?yàn)椴僮飨到y(tǒng)確實(shí)挺復(fù)雜的,下面圖例中的代碼是在freertos中創(chuàng)建按鍵控制LED亮滅的程序結(jié)構(gòu),大家可以對(duì)比一下:


3、如何選擇合適的軟件架構(gòu)
我使用過(guò)多種不同MCU做項(xiàng)目開(kāi)發(fā),例如:STM32、STC15、新唐等,也接觸過(guò)復(fù)雜的設(shè)計(jì)需求,例如:車載智能系統(tǒng)和智能家居,跑過(guò)操作系統(tǒng)ucos、freertos和Linux等等,在回到裸機(jī)開(kāi)發(fā)時(shí),就會(huì)不然而然的去思考完整系統(tǒng)的軟件架構(gòu)的設(shè)計(jì)問(wèn)題,相信在讀者中開(kāi)發(fā)裸機(jī)的也占大多數(shù)。
我認(rèn)為沒(méi)有最好的軟件架構(gòu)(程序架構(gòu)),而是只有最合適的。因?yàn)樵诓煌膽?yīng)用場(chǎng)景中適合采用不同的程序設(shè)計(jì),而單純的去比較哪種程序架構(gòu)是最好的沒(méi)有什么實(shí)際的意義。那接下來(lái)我們來(lái)對(duì)具體的應(yīng)用場(chǎng)景進(jìn)行分析,在一些邏輯清晰功能單一的系統(tǒng)中就很適合選擇順序執(zhí)行的前后臺(tái)架構(gòu),這個(gè)軟件架構(gòu)往往能夠滿足我們大部分的需求,比如電飯煲、電磁爐和聲控?zé)襞莸龋欢谝恍┵Y源缺乏的單片機(jī)并且對(duì)系統(tǒng)可靠性要求較高的情況下非常適合,因?yàn)檫@種方法的系統(tǒng)耗費(fèi)比較小,只是犧牲了一個(gè)定時(shí)器而已,但是選擇此種程序架構(gòu)需要我們對(duì)時(shí)間片進(jìn)行深思熟慮的劃分;最后,在一些功能復(fù)雜,邏輯控制較為困難的系統(tǒng)中就適合選擇多任務(wù)操作系統(tǒng),比如視頻監(jiān)控系統(tǒng)、無(wú)人機(jī)等等應(yīng)用場(chǎng)景。
作為一名嵌入式軟件工程師,掌握這三種軟件架構(gòu)是非常有必要的,它們可以讓我們?cè)谠O(shè)計(jì)程序時(shí)擁有更多的選擇和思考,而每一種不同的程序架構(gòu)都具備它自己的優(yōu)勢(shì)與不足,這需要我們?nèi)ビ眯膶?shí)踐方可體會(huì)到它的奧妙。
- 三種常見(jiàn)嵌入式開(kāi)發(fā)程序架構(gòu)
- 嵌入式開(kāi)發(fā)需要架構(gòu)設(shè)計(jì)嗎?
- 嵌入式開(kāi)發(fā)|嵌入式軟件框架《二》前后臺(tái)任務(wù)框架-cola os系統(tǒng)
- 如何入門嵌入式?ARM嵌入式開(kāi)發(fā)板學(xué)習(xí)方法步驟
- 嵌入式開(kāi)發(fā)Linux入門
- 嵌入式開(kāi)發(fā)資料免費(fèi)分享
- 嵌入式開(kāi)發(fā)|嵌入式軟件框架《一》常用的軟件框架介紹與選擇
- 嵌入式開(kāi)發(fā)(一):嵌入式開(kāi)發(fā)新手入門
- 如何快速熟練掌握嵌入式開(kāi)發(fā)嵌入式開(kāi)發(fā)工程師需要做哪些事情
- 嵌入式開(kāi)發(fā)中CPU大端和小端模式的詳細(xì)資料和程序分析講解
- 邏輯分析儀在嵌入式開(kāi)發(fā)調(diào)試中的應(yīng)用 33次下載
- 黑色經(jīng)典系列之windows ce嵌入式開(kāi)發(fā)入門-基本Xscale架構(gòu)
- windows CE嵌入式開(kāi)發(fā)入門-基于Xscale架構(gòu)案例
- windows CE嵌入式開(kāi)發(fā)入門-基于Xscale架構(gòu)
- 基于ARM的嵌入式開(kāi)發(fā)
- 嵌入式Linux開(kāi)發(fā)的三種方式 1017次閱讀
- STM32嵌入式開(kāi)發(fā)中的RTOS,你用過(guò)哪些? 2248次閱讀
- 詳解FreeRTOS:嵌入式軟件系統(tǒng)架構(gòu) 2603次閱讀
- 嵌入式開(kāi)發(fā)中串口通訊方案 2436次閱讀
- 嵌入式開(kāi)發(fā)的產(chǎn)品有哪些_嵌入式開(kāi)發(fā)的流程 1.1w次閱讀
- 基于Mac上做嵌入式開(kāi)發(fā)簡(jiǎn)析 4002次閱讀
- 解析嵌入式開(kāi)發(fā)中的一些硬件相關(guān)概念 945次閱讀
- 嵌入式開(kāi)發(fā)好學(xué)嗎_嵌入式開(kāi)發(fā)職業(yè)發(fā)展方向是什么 9207次閱讀
- 什么是嵌入式開(kāi)發(fā)板_學(xué)嵌入式用什么開(kāi)發(fā)板 7206次閱讀
- 嵌入式開(kāi)發(fā)和單片機(jī)開(kāi)發(fā)有什么區(qū)別和聯(lián)系 3.6w次閱讀
- 嵌入式C實(shí)現(xiàn)延時(shí)程序的不同變量的區(qū)別 幾種Linux嵌入式開(kāi)發(fā)環(huán)境的簡(jiǎn)單介紹 1673次閱讀
- 嵌入式開(kāi)發(fā)工具有哪些_五款嵌入式開(kāi)發(fā)工具推薦 4w次閱讀
- 學(xué)嵌入式開(kāi)發(fā)入門_學(xué)嵌入式開(kāi)發(fā)需要看哪些書(shū)籍 2.5w次閱讀
- 嵌入式開(kāi)發(fā)環(huán)境的搭建 8548次閱讀
- 嵌入式開(kāi)發(fā)就業(yè)前景分析_嵌入式領(lǐng)域的職業(yè)發(fā)展方向 1.8w次閱讀
下載排行
本周
- 1EMC電路設(shè)計(jì)工程師必備的EMC基礎(chǔ)
- 0.42 MB | 4次下載 | 2 積分
- 2AU3116 2×60W模擬輸入雙通道Class-D 音頻功率放大器數(shù)據(jù)手冊(cè)
- 1.19 MB | 1次下載 | 免費(fèi)
- 3低壓降肖特基整流管SR340L數(shù)據(jù)手冊(cè)
- 0.78 MB | 1次下載 | 免費(fèi)
- 4ZX8002E 觸摸調(diào)光LED集成IC數(shù)據(jù)手冊(cè)
- 2.27 MB | 次下載 | 免費(fèi)
- 5SOD-323塑料封裝ESD保護(hù)二極管SD05T系列規(guī)格書(shū)
- 1.07 MB | 次下載 | 免費(fèi)
- 6SOT-23塑料封裝ESD保護(hù)二極管SMxx Series系列規(guī)格書(shū)
- 0.93 MB | 次下載 | 免費(fèi)
- 7高效率整流二極管HER151 THRU HER158數(shù)據(jù)手冊(cè)
- 0.54 MB | 次下載 | 免費(fèi)
- 8低壓降肖特基整流管SL22 THRU SL210數(shù)據(jù)手冊(cè)
- 1.03 MB | 次下載 | 免費(fèi)
本月
- 1三相逆變主電路的原理圖和PCB資料合集免費(fèi)下載
- 27.35 MB | 111次下載 | 1 積分
- 2運(yùn)算放大器基本電路中文資料
- 1.30 MB | 16次下載 | 免費(fèi)
- 3蘋(píng)果iphone 11電路原理圖
- 4.98 MB | 11次下載 | 5 積分
- 4TL494工業(yè)用開(kāi)關(guān)電源原理圖資料
- 0.22 MB | 10次下載 | 1 積分
- 5常用電子元器件介紹
- 3.21 MB | 8次下載 | 免費(fèi)
- 6QW2893應(yīng)急燈專用檢測(cè)芯片
- 590.40 KB | 4次下載 | 免費(fèi)
- 7相關(guān)協(xié)議信號(hào)總結(jié)
- 0.94 MB | 4次下載 | 免費(fèi)
- 8EMC電路設(shè)計(jì)工程師必備的EMC基礎(chǔ)
- 0.42 MB | 4次下載 | 2 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935130次下載 | 10 積分
- 2開(kāi)源硬件-PMP21529.1-4 開(kāi)關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191390次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183344次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81591次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73815次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65989次下載 | 10 積分
評(píng)論