<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

深入介紹三種不同的程序架構

Q4MP_gh_c472c21 ? 來源:嵌入式在左C語言在右 ? 作者:嵌入式在左C語言在 ? 2022-03-12 08:36 ? 次閱讀

0、前言

嵌入式軟件開發,包括單片機開發中,軟件架構對于開發人員是一個必須認真考慮的問題。軟件架構對于系統整體的穩定性和可靠性是非常重要的,一個合適的軟件架構不僅結構清晰,并且便于開發。

我相信在嵌入式單片機軟件開發的初期大多數開發者采用的都是簡單的前后臺順序執行架構(我就是這樣的)。

在嵌入式軟件開發中,程序架構主要分為三種,本篇文章將對這三種程序架構做出詳解。

1、軟件架構存在的意義

可以說一個好的程序架構,是一個有經驗的工程師和一個初學者的分水嶺。 軟件架構對于開發人員是友好的,你希望先執行什么任務后執行什么任務,或者這一個時間點執行什么任務下一個執行什么任務,又或者什么事件會同步到某個任務等等,在不同的軟件架構下,解決上述問題的具體方法都是有所區別的。 軟件架構對開發者最大的幫助是: 幫助開發者掌控整個工程的框架,當你熟練使用其中某一個程序架構后,對于系統中出現的bug你一定能夠快速的定位并解決。 當然,我建議要根據需要選擇合適的軟件架構進行開發,具體原因在文章后面會進行介紹。

2、深入介紹三種不同的程序架構

三種常用的軟件架構有:順序執行的前后臺系統、時間片輪詢系統和多任務操作系統。 為了讓大家有一個更為清晰的認識,我分別用三種軟件架構對一個實例進行介紹說明。這個實例如下: 它有4個任務,這4個任務為按鍵掃描、聲光報警、顯示屏刷新和超聲波測距。這個實例的具體功能是通過按鍵設置測量距離的閾值,當測距距離低于設置的閾值時,觸發聲光報警并且將測量距離實時顯示在顯示屏上(這個應用是汽車倒車雷達的具體體現)。

順序執行的前后臺系統

在順序執行的前后臺系統中,我會把鍵盤掃描用查詢的方式放在while(1)中,而顯示屏刷新和超聲波測距使用中斷,在中斷服務函數中獲取測量距離后進行顯示,在主函數的循環中進行按鍵的檢測,聲光處理也放在主循環中。這樣整個程序就以變量標志的同步方式在主循環和后臺中斷中執行,對應的程序代碼如圖所示:

c5e3ae5c-5567-11ec-b2e9-dac502259ad0.png

順序執行前后臺系統的主函數

c5f3ccec-5567-11ec-b2e9-dac502259ad0.png

順序執行前后臺系統的中斷服務函數 這種架構的優點是使用簡單易于理解,而缺點是每個任務所占的CPU時間過長的話,會導致程序的實時性能差,就比如按鍵的檢測等。

時間片輪詢系統和多任務操作系統

時間片輪詢法實際上通常出現在操作系統中,也就是說他屬于操作系統,但在這里所說的是基于前后臺系統的時間片輪詢。時間片輪詢法的實質其實就是選出一個定時器,沒進一次定時中斷對計數值進行自加,在主循環中根據這個計數值執行任務,這個計數值也就是任務輪詢的時間片。 在這個實例中,如果采用時間片輪詢系統的話,首先選用主控芯片的任一定時器,定時器定時時間周期由我們決定,為了保證實時性和運行效率,這個值通常取10ms、30ms、50ms等,我會將按鍵掃描輪值值設置為20ms,因為按鍵抖動的時長一般為20ms,這樣處理既達到了消抖的目的,又不會漏掉按鍵的檢測;而顯示屏的刷新設置為30ms,如果你覺得刷新反應慢了也可以修改這一輪詢值得到改善; 而超聲波測距的輪詢值設置為100ms,即每隔100模式觸發測距一次,這個測距頻率已經能夠滿足大多數的情況了。 程序代碼如下:

c604e720-5567-11ec-b2e9-dac502259ad0.png

時間片輪詢系統的主函數

c6133e56-5567-11ec-b2e9-dac502259ad0.png

時間片輪詢系統的定時器中斷函數

可以看出時間片輪詢法相比順序執行還是有很大優勢的,既有順序執行法的優點,也有操作系統的部分優點。

多任務操作系統

操作系統的本身是一個比較復雜的東西,任務的管理和調度實現的底層是很復雜和困難的。但是呢,我們一般都是把操作系統本身作為一個工具一個平臺,我們的目的是使用它的功能而不是開發一個操作系統。

我使用過ucosfreertos小型的實時操作系統,也使用過Linux大型的操作系統,有了操作系統,不管是對于程序的穩定性和開發的效率都會好很多。我們在使用操作系統的時候更多的需要去學習和理解它的一些調度和通信的方式。

實際上真正能使用操作系統的人并不多,反而是跑裸機的占大多數,這也和產品的具體要求有關,很多簡單的系統只需要裸機即可滿足。

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

c62247e8-5567-11ec-b2e9-dac502259ad0.png

freertos多任務系統中主函數

c6317b14-5567-11ec-b2e9-dac502259ad0.png

freertos多任務操作系統中的任務回調函數

3、如何選擇合適的軟件架構

我使用過多種不同MCU做項目開發,例如:STM32、STC15、新唐等,也接觸過復雜的設計需求,例如:車載智能系統和智能家居,跑過操作系統ucos、freertos和Linux等等,在回到裸機開發時,就會不然而然的去思考完整系統的軟件架構的設計問題,相信在讀者中開發裸機的也占大多數。 我認為沒有最好的軟件架構(程序架構),而是只有最合適的。因為在不同的應用場景中適合采用不同的程序設計,而單純的去比較哪種程序架構是最好的沒有什么實際的意義。 那接下來我們來對具體的應用場景進行分析,在一些邏輯清晰功能單一的系統中就很適合選擇順序執行的前后臺架構,這個軟件架構往往能夠滿足我們大部分的需求,比如電飯煲、電磁爐和聲控燈泡等; 而在一些資源缺乏的單片機并且對系統可靠性要求較高的情況下非常適合,因為這種方法的系統耗費比較小,只是犧牲了一個定時器而已,但是選擇此種程序架構需要我們對時間片進行深思熟慮的劃分; 最后,在一些功能復雜,邏輯控制較為困難的系統中就適合選擇多任務操作系統,比如視頻監控系統、無人機等等應用場景。 作為一名嵌入式軟件工程師,掌握這三種軟件架構是非常有必要的,它們可以讓我們在設計程序時擁有更多的選擇和思考,而每一種不同的程序架構都具備它自己的優勢與不足,這需要我們去用心實踐方可體會到它的奧妙。

原文標題:詳解嵌入式開發中的3種程序架構

文章出處:【微信公眾號:嵌入式ARM】歡迎添加關注!文章轉載請注明出處。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6008

    文章

    44062

    瀏覽量

    622636
  • 嵌入式
    +關注

    關注

    5001

    文章

    18394

    瀏覽量

    291040
  • 程序
    +關注

    關注

    114

    文章

    3633

    瀏覽量

    79695

原文標題:詳解嵌入式開發中的3種程序架構

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    ARM架構核心板三種Form Factor之比較

    ARM架構核心板三種FormFactor之比較文 By易江春水國際上,在ARM核心板領域,最為常見的三種Form Factor 分別是SMARC,Qseven, Apalis, 分別有不同的廠家在
    發表于 09-28 10:35

    三種主流芯片架構

    三種主流芯片架構簡單比較三種主流芯片架構  1. ARM ARM是高級精簡指令集的簡稱(Advanced RISC Machine),它是一個32位的精簡指令集
    發表于 08-14 10:11

    關于三種不同的ADC驅動器架構會有什么區別?

    有沒有人講解一下三種不同的ADC驅動器架構:單到單、單端到差動和差動到差動?
    發表于 04-07 06:55

    介紹三種視頻數字接口的標準

    本文逐一介紹三種視頻數字接口的標準。
    發表于 06-03 06:24

    單片機大致應用程序架構三種

    轉載----在工作中經過摸索實驗,總結出單片機大致應用程序架構三種:1. 簡單的前后臺順序執行程序,這類寫法是大多數人使用的方法,不需用思考程序
    發表于 07-21 08:50

    STM32的三種復位類型

    最近在項目的時候需要判別STM32的復位類型,網上這部分資料也有許多大神進行總結。但是感覺不是特別深入,因此,小編參考參考了STM32的參考手冊進行詳細總結了一下。1、STM32的三種復位類型分別為
    發表于 08-02 06:32

    LwIP協議棧開發嵌入式網絡的三種方法有何關系

    服務器端通信為例,分析三種方法以及之間的關系,著重介紹基于raw API的應用程序設計。 LwIP協議棧開發嵌入式網絡的三種方法分析 摘要輕量級的TCP/IP協議棧LwIP,提供了
    發表于 08-05 07:55

    算法的三種結構介紹

    嵌入式學習日記2018.11.62018.11.16理論學習階段計算機科學導論(原書第二版)第8章 算法學到的新知識1算法的三種結構:順序、判斷(選擇)和重復(循環)2常用的算法:求和、乘積、找最小
    發表于 11-08 07:12

    STM32的三種開發方式分享

    STM32的三種開發方式通常新手在入門STM32的時候,首先都要先選擇一要用的開發方式,不同的開發方式會導致你編程的架構是完全不一樣的。一般大多數都會選用標準庫和HAL庫,而極少部分人會...
    發表于 12-01 07:59

    STM32的三種boot模式介紹

    淺識STM32的三種boot模式文章目錄淺識STM32的三種boot模式任務摘要一、認識boot1.三種BOOT模式介紹2.開發BOOT模式選擇3.STM32
    發表于 12-10 07:46

    STM32的三種Boot模式的差異

    :STM32三種BOOT模式介紹.啟動,一般來說就是指我們下好程序后,重啟芯片時,SYSCLK的第4個上升沿,BOOT引腳的值將被鎖存。用戶可以通過設置BOOT1和BOOT0引腳的狀態,來選擇在復位后的啟動模式。內存類型簡介主閃
    發表于 12-20 07:54

    單片機三種常用的軟件架構

    一個合適的軟件架構不僅結構清晰,而且可以便于開發與維護。便于幫助開發者把握整個工程的框架三種常用的軟件架構:1.順序執行的前后臺系統2.時間片輪詢系統3.多任務操作系統順序執行的前后臺系統程序
    發表于 01-07 08:29

    介紹一下引腳的三種狀態

    介紹一下引腳的三種狀態
    發表于 01-14 07:12

    記錄三種DMA模式

    串口模式實現有三種1.普通模式:在主函數中接收函數2.中斷模式:產生的不影響主程序運行3. DMA模式:與主函數互不影響,獨立運行本文記錄三種DMA模式。
    發表于 02-28 07:54

    深入介紹嵌入式開發中三種不同的程序架構

    三種常用的軟件架構有:順序執行的前后臺系統、時間片輪詢系統和多任務操作系統:STM32單片機開發中的RTOS。為了讓大家有一個更為清晰的認識,我分別用三種軟件架構對一個實例進行
    的頭像 發表于 05-24 16:02 ?1399次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>