0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

strongerHuang ? 來源:嵌入式在左c語言在右 ? 作者:嵌入式在左c語言在 ? 2021-09-08 09:18 ? 次閱讀

嵌入式軟件開發(fā),包括單片機開發(fā)中,軟件架構(gòu)對于開發(fā)人員是一個必須認真考慮的問題。軟件架構(gòu)對于系統(tǒng)整體的穩(wěn)定性和可靠性是非常重要的,一個合適的軟件架構(gòu)不僅結(jié)構(gòu)清晰,并且便于開發(fā)、維護。

我相信在嵌入式單片機軟件開發(fā)的初期大多數(shù)開發(fā)者采用的都是簡單的前后臺順序執(zhí)行架構(gòu)(我就是這樣的)。在嵌入式軟件開發(fā)中,程序架構(gòu)主要分為三種,本篇文章將對這三種程序架構(gòu)做出詳解。

軟件架構(gòu)存在的意義

可以說一個好的程序架構(gòu),是一個有經(jīng)驗的工程師和一個初學者的分水嶺。軟件架構(gòu)對于開發(fā)人員是友好的,你希望先執(zhí)行什么任務(wù)后執(zhí)行什么任務(wù),或者這一個時間點執(zhí)行什么任務(wù)下一個執(zhí)行什么任務(wù),又或者什么事件會同步到某個任務(wù)等等,在不同的軟件架構(gòu)下,解決上述問題的具體方法都是有所區(qū)別的。

軟件架構(gòu)對開發(fā)者最大的幫助是:幫助開發(fā)者掌控整個工程的框架,當你熟練使用其中某一個程序架構(gòu)后,對于系統(tǒng)中出現(xiàn)的bug你一定能夠快速的定位并解決。當然,我建議要根據(jù)需要選擇合適的軟件架構(gòu)進行開發(fā),具體原因在文章后面會進行介紹。

介紹三種不同的程序架構(gòu)

三種常用的軟件架構(gòu)有:

順序執(zhí)行的前后臺系統(tǒng)

時間片輪詢系統(tǒng)

多任務(wù)操作系統(tǒng)

為了讓大家有一個更為清晰的認識,我分別用三種軟件架構(gòu)對一個實例進行介紹說明。這個實例如下:它有4個任務(wù),這4個任務(wù)為按鍵掃描、聲光報警、顯示屏刷新和超聲波測距。這個實例的具體功能是通過按鍵設(shè)置測量距離的閾值,當測距距離低于設(shè)置的閾值時,觸發(fā)聲光報警并且將測量距離實時顯示在顯示屏上(這個應(yīng)用是汽車倒車雷達的具體體現(xiàn))。

1.順序執(zhí)行的前后臺系統(tǒng)在順序執(zhí)行的前后臺系統(tǒng)中,我會把鍵盤掃描用查詢的方式放在while(1)中,而顯示屏刷新和超聲波測距使用中斷,在中斷服務(wù)函數(shù)中獲取測量距離后進行顯示,在主函數(shù)的循環(huán)中進行按鍵的檢測,聲光處理也放在主循環(huán)中。

這樣整個程序就以變量標志的同步方式在主循環(huán)和后臺中斷中執(zhí)行,對應(yīng)的程序代碼如圖所示:

84fd4d4c-1018-11ec-8fb8-12bb97331649.png

順序執(zhí)行前后臺系統(tǒng)的主函數(shù)

8509bf8c-1018-11ec-8fb8-12bb97331649.png

順序執(zhí)行前后臺系統(tǒng)的中斷服務(wù)函數(shù)

這種架構(gòu)的優(yōu)點是使用簡單易于理解,而缺點是每個任務(wù)所占的CPU時間過長的話,會導致程序的實時性能差,就比如按鍵的檢測等。

2.時間片輪詢系統(tǒng)和多任務(wù)操作系統(tǒng)時間片輪詢法實際上通常出現(xiàn)在操作系統(tǒng)中,也就是說他屬于操作系統(tǒng),但在這里所說的是基于前后臺系統(tǒng)的時間片輪詢。時間片輪詢法的實質(zhì)其實就是選出一個定時器,沒進一次定時中斷對計數(shù)值進行自加,在主循環(huán)中根據(jù)這個計數(shù)值執(zhí)行任務(wù),這個計數(shù)值也就是任務(wù)輪詢的時間片。

在這個實例中,如果采用時間片輪詢系統(tǒng)的話,首先選用主控芯片的任一定時器,定時器定時時間周期由我們決定,為了保證實時性和運行效率,這個值通常取10ms、30ms、50ms等,我會將按鍵掃描輪值值設(shè)置為20ms,因為按鍵抖動的時長一般為20ms,這樣處理既達到了消抖的目的,又不會漏掉按鍵的檢測;而顯示屏的刷新設(shè)置為30ms,如果你覺得刷新反應(yīng)慢了也可以修改這一輪詢值得到改善;而超聲波測距的輪詢值設(shè)置為100ms,即每隔100模式觸發(fā)測距一次,這個測距頻率已經(jīng)能夠滿足大多數(shù)的情況了。

程序代碼如下:

851d2e50-1018-11ec-8fb8-12bb97331649.png

時間片輪詢系統(tǒng)的主函數(shù)

8532483a-1018-11ec-8fb8-12bb97331649.png

時間片輪詢系統(tǒng)的定時器中斷函數(shù)

可以看出時間片輪詢法相比順序執(zhí)行還是有很大優(yōu)勢的,既有順序執(zhí)行法的優(yōu)點,也有操作系統(tǒng)的部分優(yōu)點。

3.多任務(wù)操作系統(tǒng)操作系統(tǒng)的本身是一個比較復雜的東西,任務(wù)的管理和調(diào)度實現(xiàn)的底層是很復雜和困難的。但是呢,我們一般都是把操作系統(tǒng)本身作為一個工具一個平臺,我們的目的是使用它的功能而不是開發(fā)一個操作系統(tǒng)。

我使用過ucosfreertos小型的實時操作系統(tǒng),也使用過Linux大型的操作系統(tǒng),有了操作系統(tǒng),不管是對于程序的穩(wěn)定性和開發(fā)的效率都會好很多。我們在使用操作系統(tǒng)的時候更多的需要去學習和理解它的一些調(diào)度和通信的方式。實際上真正能使用操作系統(tǒng)的人并不多,反而是跑裸機的占大多數(shù),這也和產(chǎn)品的具體要求有關(guān),很多簡單的系統(tǒng)只需要裸機即可滿足。

在這里本我不過多的介紹操作系統(tǒng)本身,因為操作系統(tǒng)確實挺復雜的,下面圖例中的代碼是在freertos中創(chuàng)建按鍵控制LED亮滅的程序結(jié)構(gòu),大家可以對比一下:

853fa192-1018-11ec-8fb8-12bb97331649.png

freertos多任務(wù)系統(tǒng)中主函數(shù)

8551dd94-1018-11ec-8fb8-12bb97331649.png

freertos多任務(wù)操作系統(tǒng)中的任務(wù)回調(diào)函數(shù)

如何選擇合適的軟件架構(gòu)

我使用過多種不同MCU做項目開發(fā),例如:STM32、STC15、新唐等,也接觸過復雜的設(shè)計需求,例如:車載智能系統(tǒng)和智能家居,跑過操作系統(tǒng)ucos、freertos和Linux等等。

在回到裸機開發(fā)時,就會不然而然的去思考完整系統(tǒng)的軟件架構(gòu)的設(shè)計問題,相信在讀者中開發(fā)裸機的也占大多數(shù)。

我認為沒有最好的軟件(程序)架構(gòu),而只有最合適的軟件架構(gòu)。因為在不同的應(yīng)用場景中適合采用不同的程序設(shè)計,而單純的去比較哪種程序架構(gòu)是最好的沒有什么實際的意義。

那接下來我們來對具體的應(yīng)用場景進行分析,在一些邏輯清晰功能單一的系統(tǒng)中就很適合選擇順序執(zhí)行的前后臺架構(gòu),這個軟件架構(gòu)往往能夠滿足我們大部分的需求,比如電飯煲、電磁爐和聲控燈泡等;而在一些資源缺乏的單片機并且對系統(tǒng)可靠性要求較高的情況下非常適合,因為這種方法的系統(tǒng)耗費比較小,只是犧牲了一個定時器而已,但是選擇此種程序架構(gòu)需要我們對時間片進行深思熟慮的劃分;

最后,在一些功能復雜,邏輯控制較為困難的系統(tǒng)中就適合選擇多任務(wù)操作系統(tǒng),比如視頻監(jiān)控系統(tǒng)、無人機等等應(yīng)用場景。

作為一名嵌入式軟件工程師,掌握這三種軟件架構(gòu)是非常有必要的,它們可以讓我們在設(shè)計程序時擁有更多的選擇和思考,而每一種不同的程序架構(gòu)都具備它自己的優(yōu)勢與不足,這需要我們?nèi)ビ眯膶嵺`方可體會到它的奧妙。

責任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5045

    文章

    18816

    瀏覽量

    298475
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6545

    瀏覽量

    122738
  • 軟件
    +關(guān)注

    關(guān)注

    69

    文章

    4570

    瀏覽量

    86695

原文標題:軟件架構(gòu)存在的意義

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    聚焦嵌入式開發(fā)的合規(guī)性工具、項目管理工具、版本迭代工具應(yīng)用

    ,就嵌入式開發(fā)與管理領(lǐng)域的最新趨勢、工具選擇以及DevSecOps實踐應(yīng)用等方面展開了深入探討。 本期對話龍智資深DevSecOps顧問徐晨暉, 分享嵌入式開發(fā)的合規(guī)性工具、項目管理和版本管理的工具選擇,以及DevSecOps
    的頭像 發(fā)表于 07-29 15:15 ?232次閱讀

    嵌入式開發(fā)前景怎么樣?

    嵌入式開發(fā)前景非常廣闊,這主要得益于物聯(lián)網(wǎng)、人工智能、大數(shù)據(jù)等技術(shù)的快速發(fā)展,以及嵌入式系統(tǒng)在各個領(lǐng)域的廣泛應(yīng)用。以下是對嵌入式開發(fā)前景的詳細分析
    的頭像 發(fā)表于 07-10 09:00 ?1528次閱讀
    <b class='flag-5'>嵌入式開發(fā)</b>前景怎么樣?

    嵌入式開發(fā)就業(yè)前景怎么樣?

    。在智能家居領(lǐng)域,嵌入式開發(fā)的主要工作是開發(fā)各種智能化設(shè)備和系統(tǒng),如智能照明、智能安防、智能家電等。嵌入式開發(fā)人員需要掌握相關(guān)的硬件和軟件技術(shù),如處理器、傳感器、通信技術(shù)、操作系統(tǒng)等,
    發(fā)表于 06-07 14:51

    fpga是嵌入式開發(fā)

    FPGA(現(xiàn)場可編程門陣列)與嵌入式開發(fā)之間確實存在一定的關(guān)聯(lián),但它們在本質(zhì)上是兩個不同的領(lǐng)域。
    的頭像 發(fā)表于 03-15 14:18 ?747次閱讀

    嵌入式軟件開發(fā)軟件開發(fā)的區(qū)別

    嵌入式軟件開發(fā)軟件開發(fā)是兩個不同的概念,它們在一些關(guān)鍵方面有著明顯的區(qū)別。嵌入式軟件開發(fā)是指開發(fā)
    的頭像 發(fā)表于 01-22 15:27 ?1786次閱讀

    嵌入式開發(fā)測試秘訣

    嵌入式軟件開發(fā)過程中,花在測試和花在編碼的時間比通常在3:1左右(實際上可能更多)。這個比例會隨著工程師編程、測試水平的提高而不斷下降,但無論如何,軟件測試都是嵌入式
    的頭像 發(fā)表于 11-24 16:18 ?404次閱讀

    c語言嵌入式開發(fā)

    電子發(fā)燒友網(wǎng)站提供《c語言嵌入式開發(fā).zip》資料免費下載
    發(fā)表于 11-17 14:11 ?2次下載
    c語言<b class='flag-5'>嵌入式開發(fā)</b>

    嵌入式開發(fā)系統(tǒng)基礎(chǔ)知識

    電子發(fā)燒友網(wǎng)站提供《嵌入式開發(fā)系統(tǒng)基礎(chǔ)知識.pdf》資料免費下載
    發(fā)表于 11-17 10:59 ?1次下載
    <b class='flag-5'>嵌入式開發(fā)</b>系統(tǒng)基礎(chǔ)知識

    嵌入式開發(fā)學習路線

    電子發(fā)燒友網(wǎng)站提供《嵌入式開發(fā)學習路線.doc》資料免費下載
    發(fā)表于 11-17 10:13 ?13次下載
    <b class='flag-5'>嵌入式開發(fā)</b>學習路線

    嵌入式開發(fā)學習路線分享

    的實際應(yīng)用范疇,可以說目前市場上對嵌入式開發(fā)人才的需求越來越大,很多小伙伴都想通過培訓學習的方式走向嵌入式開發(fā)相關(guān)的崗位。下面,小編就給各位小伙伴介紹一個簡單易懂的學
    的頭像 發(fā)表于 11-15 11:51 ?1115次閱讀
    <b class='flag-5'>嵌入式開發(fā)</b>學習路線分享

    windows ce嵌入式開發(fā)入門-基本Xscale架構(gòu)

    電子發(fā)燒友網(wǎng)站提供《windows ce嵌入式開發(fā)入門-基本Xscale架構(gòu).pdf》資料免費下載
    發(fā)表于 11-10 11:18 ?0次下載
    windows ce<b class='flag-5'>嵌入式開發(fā)</b>入門-基本Xscale<b class='flag-5'>架構(gòu)</b>

    嵌入式軟件不需要架構(gòu)嗎?為什么沒有嵌入式軟件架構(gòu)師?

    我的看法:目前國內(nèi)的嵌入式開發(fā)主要分為嵌入式底層開發(fā)嵌入式應(yīng)用開發(fā),嵌入式的底層
    發(fā)表于 10-27 14:45 ?448次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>不需要<b class='flag-5'>架構(gòu)</b>嗎?為什么沒有<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b><b class='flag-5'>架構(gòu)</b>師?

    嵌入式開發(fā)入門學習

    電子發(fā)燒友網(wǎng)站提供《嵌入式開發(fā)入門學習.doc》資料免費下載
    發(fā)表于 10-26 09:37 ?1次下載
    <b class='flag-5'>嵌入式開發(fā)</b>入門學習

    嵌入式開發(fā)的關(guān)鍵技術(shù)是什么_應(yīng)該考慮哪些因素

    嵌入式開發(fā)是指利用分立元件或集成器件進行電路設(shè)計、結(jié)構(gòu)設(shè)計,再進行軟件編程(通常是高級語言),實驗,經(jīng)過多輪修改設(shè)計、制作,最終完成整個系統(tǒng)的開發(fā)。這種嵌入式開發(fā),適用于未來產(chǎn)品比較單
    的頭像 發(fā)表于 10-15 14:50 ?1052次閱讀

    Linux系統(tǒng)的嵌入式開發(fā)是什么

    嵌入式開發(fā)聽起來很高大上,但其實它就在我們身邊。   嵌入式開發(fā)是指將操作系統(tǒng)、應(yīng)用程序或數(shù)據(jù)存儲在嵌入式設(shè)備,如手機、平板電腦、智能家居等。   隨著物聯(lián)網(wǎng)時代的到來,
    的頭像 發(fā)表于 10-12 15:40 ?1522次閱讀