色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

嵌入式開(kāi)發(fā)中做常用的三種程序構(gòu)架

jf_78858299 ? 來(lái)源: 混說(shuō)Linux ? 作者: 混說(shuō)Linux ? 2023-02-13 10:20 ? 次閱讀

嵌入式軟件開(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í)間片輪詢(xún)系統(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)用是汽車(chē)倒車(chē)?yán)走_(dá)的具體體現(xiàn))。

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

在順序執(zhí)行的前后臺(tái)系統(tǒng)中,我會(huì)把鍵盤(pán)掃描用查詢(xún)的方式放在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)的程序代碼如圖所示:

圖片

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

圖片

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

這種架構(gòu)的優(yōu)點(diǎn)是使用簡(jiǎn)單易于理解,而缺點(diǎn)是每個(gè)任務(wù)所占的CPU時(shí)間過(guò)長(zhǎng)的話(huà),會(huì)導(dǎo)致程序的實(shí)時(shí)性能差,就比如按鍵的檢測(cè)等。

2.2 時(shí)間片輪詢(xún)系統(tǒng)

時(shí)間片輪詢(xún)法實(shí)際上通常出現(xiàn)在操作系統(tǒng)中,也就是說(shuō)他屬于操作系統(tǒng),但在這里所說(shuō)的是基于前后臺(tái)系統(tǒng)的時(shí)間片輪詢(xún)。時(shí)間片輪詢(xún)法的實(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ù)輪詢(xún)的時(shí)間片。

在這個(gè)實(shí)例中,如果采用時(shí)間片輪詢(xún)系統(tǒng)的話(huà),首先選用主控芯片的任一定時(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)慢了也可以修改這一輪詢(xún)值得到改善;

而超聲波測(cè)距的輪詢(xún)值設(shè)置為100ms,即每隔100模式觸發(fā)測(cè)距一次,這個(gè)測(cè)距頻率已經(jīng)能夠滿(mǎn)足大多數(shù)的情況了。

程序代碼如下:

圖片

▲ 時(shí)間片輪詢(xún)的系統(tǒng)函數(shù)

圖片

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

可以看出時(shí)間片輪詢(xún)法相比順序執(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ò)ucosfreertos小型的實(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ī)即可滿(mǎn)足。

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

圖片

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

圖片

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

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

我使用過(guò)多種不同MCU做項(xiàng)目開(kāi)發(fā),例如:STM32、STC15、新唐等,也接觸過(guò)復(fù)雜的設(shè)計(jì)需求,例如:車(chē)載智能系統(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)往往能夠滿(mǎn)足我們大部分的需求,比如電飯煲、電磁爐和聲控?zé)襞莸龋?/p>

而在一些資源缺乏的單片機(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ì)到它的奧妙。

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

    關(guān)注

    5089

    文章

    19167

    瀏覽量

    306710
  • 開(kāi)發(fā)
    +關(guān)注

    關(guān)注

    0

    文章

    370

    瀏覽量

    40883
  • 軟件架構(gòu)
    +關(guān)注

    關(guān)注

    0

    文章

    64

    瀏覽量

    10297
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    三種常用嵌入式操作系統(tǒng)是什么

    三種常用嵌入式操作系統(tǒng)——Palm OS、Windows CE、Linux;在此基礎(chǔ)上、分析、比較這三種嵌入式操作系統(tǒng),給出它們之間的異同
    發(fā)表于 12-22 07:36

    邏輯分析儀在嵌入式開(kāi)發(fā)調(diào)試的應(yīng)用

    嵌入式開(kāi)發(fā)調(diào)試開(kāi)發(fā)人員的調(diào)試手段包括斷點(diǎn)、觸發(fā)和跟蹤三種。在線(xiàn)調(diào)試器(I(、I))與邏輯分析儀(IA)協(xié)調(diào)工作,為調(diào)試新一代嵌入式處理器
    發(fā)表于 11-07 15:58 ?33次下載
    邏輯分析儀在<b class='flag-5'>嵌入式開(kāi)發(fā)</b>調(diào)試<b class='flag-5'>中</b>的應(yīng)用

    嵌入式開(kāi)發(fā)

    嵌入式開(kāi)發(fā)就是指在嵌入式操作系統(tǒng)下進(jìn)行開(kāi)發(fā)嵌入式Linux是以L(fǎng)inux為基礎(chǔ)的嵌入式作業(yè)系統(tǒng)。這里提供了
    發(fā)表于 12-20 13:21
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>

    在Mac上嵌入式開(kāi)發(fā)

    前言 目前嵌入式開(kāi)發(fā)平臺(tái)按照性能可以分為兩類(lèi),一是CPU只有數(shù)十兆的單片機(jī),一是比較高級(jí)的可以跑Linux甚至Android的嵌入式平臺(tái)(其實(shí)iPhone、Android手機(jī)都屬于
    發(fā)表于 10-15 12:21 ?2次下載
    在Mac上<b class='flag-5'>做</b><b class='flag-5'>嵌入式開(kāi)發(fā)</b>

    基于Mac上嵌入式開(kāi)發(fā)簡(jiǎn)析

    目前嵌入式開(kāi)發(fā)平臺(tái)按照性能可以分為兩類(lèi),一是CPU只有數(shù)十兆的單片機(jī),一是比較高級(jí)的可以跑Linux甚至Android的嵌入式平臺(tái)(其實(shí)iPhone、Android手機(jī)都屬于
    發(fā)表于 06-07 18:54 ?4004次閱讀
    基于Mac上<b class='flag-5'>做</b><b class='flag-5'>嵌入式開(kāi)發(fā)</b>簡(jiǎn)析

    嵌入式開(kāi)發(fā)常用的工具軟件

    嵌入式開(kāi)發(fā)那些常用的工具軟件
    的頭像 發(fā)表于 01-14 17:00 ?1.4w次閱讀

    嵌入式開(kāi)發(fā)常用的軟件架構(gòu)

    單片機(jī)軟件開(kāi)發(fā)的初期大多數(shù)開(kāi)發(fā)者采用的都是簡(jiǎn)單的前后臺(tái)順序執(zhí)行架構(gòu)(我就是這樣的)。在嵌入式軟件開(kāi)發(fā)
    的頭像 發(fā)表于 01-01 10:16 ?5618次閱讀
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>中<b class='flag-5'>常用</b>的軟件架構(gòu)

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

    或單片機(jī)軟件開(kāi)發(fā)的初期大多數(shù)開(kāi)發(fā)者采用的都是簡(jiǎn)單的前后臺(tái)順序執(zhí)行架構(gòu)。在嵌入式軟件開(kāi)發(fā)程序
    發(fā)表于 01-22 08:27 ?12次下載
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b><b class='flag-5'>中</b>要用的<b class='flag-5'>三種</b><b class='flag-5'>程序</b>架構(gòu)~

    嵌入式開(kāi)發(fā)的幾種常用的工具介紹

    嵌入式開(kāi)發(fā)常用的虛擬機(jī)與容器 1.本文說(shuō)明 2.VMware Workstatio 2.Oracle VM VirtualBox 3.window10 的WSL2 Linux子系統(tǒng)
    的頭像 發(fā)表于 04-02 10:05 ?6186次閱讀
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b><b class='flag-5'>中</b>的幾種<b class='flag-5'>常用</b>的工具介紹

    嵌入式開(kāi)發(fā)(一):嵌入式開(kāi)發(fā)新手入門(mén)

    嵌入式開(kāi)發(fā)環(huán)境及交叉編譯環(huán)境,開(kāi)發(fā)完成后,編譯得到bin文件,然后在Windows下將bin文件通過(guò)串口或網(wǎng)絡(luò)下發(fā)到嵌入式板卡,程序嵌入式
    發(fā)表于 10-14 10:58 ?79次下載
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>(一):<b class='flag-5'>嵌入式開(kāi)發(fā)</b>新手入門(mén)

    python嵌入式開(kāi)發(fā)_Python和嵌入式的區(qū)別是什么?可以嵌入式開(kāi)發(fā)嗎?

    從概念上來(lái)說(shuō),嵌入式和Python的區(qū)別還是比較明顯的,嵌入式是一個(gè)開(kāi)發(fā)領(lǐng)域,而Python則是一門(mén)編程語(yǔ)言。下面就來(lái)和大家說(shuō)一說(shuō)嵌入式和Python這兩個(gè)之間的區(qū)別。
    發(fā)表于 11-02 20:21 ?14次下載
    python<b class='flag-5'>做</b><b class='flag-5'>嵌入式開(kāi)發(fā)</b>_Python和<b class='flag-5'>嵌入式</b>的區(qū)別是什么?可以<b class='flag-5'>做</b><b class='flag-5'>嵌入式開(kāi)發(fā)</b>嗎?

    嵌入式學(xué)習(xí)培訓(xùn)能學(xué)會(huì)嗎?嵌入式開(kāi)發(fā)培訓(xùn)都要學(xué)什么?

    等相關(guān)知識(shí),學(xué)習(xí)QT程序開(kāi)發(fā),進(jìn)行嵌入式系統(tǒng)程序的調(diào)試。學(xué)會(huì)嵌入式開(kāi)發(fā)的分析問(wèn)題、解決問(wèn)題的思維方法,掌握
    發(fā)表于 11-03 10:06 ?15次下載
    <b class='flag-5'>嵌入式</b>學(xué)習(xí)培訓(xùn)能學(xué)會(huì)嗎?<b class='flag-5'>嵌入式開(kāi)發(fā)</b>培訓(xùn)都要學(xué)什么?

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

    單片機(jī)軟件開(kāi)發(fā)的初期大多數(shù)開(kāi)發(fā)者采用的都是簡(jiǎn)單的前后臺(tái)順序執(zhí)行架構(gòu)(我就是這樣的)。在嵌入式軟件開(kāi)發(fā)
    發(fā)表于 12-08 20:36 ?14次下載
    <b class='flag-5'>三種</b>常見(jiàn)<b class='flag-5'>嵌入式開(kāi)發(fā)</b><b class='flag-5'>程序</b>架構(gòu)

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

    嵌入式開(kāi)發(fā)聽(tīng)起來(lái)很高大上,但其實(shí)它就在我們身邊。   嵌入式開(kāi)發(fā)是指將操作系統(tǒng)、應(yīng)用程序或數(shù)據(jù)存儲(chǔ)在嵌入式設(shè)備,如手機(jī)、平板電腦、智
    的頭像 發(fā)表于 10-12 15:40 ?1817次閱讀

    嵌入式Linux開(kāi)發(fā)三種方式

    嵌入式Linux開(kāi)發(fā)主要有三種方式:裸機(jī)開(kāi)發(fā)、SDK開(kāi)發(fā)和驅(qū)動(dòng)開(kāi)發(fā)
    的頭像 發(fā)表于 01-22 14:22 ?1020次閱讀
    主站蜘蛛池模板: 无码精品AV久久久奶水| 69夫妇交友群| 亚洲国产精品综合久久一线| 午夜片无码区在线观看| 亚洲精品成人无码A片在线| 诱人的秘书BD在线观看| 99re久久这里只有精品| 成人免费视频在| 国产一区二区三区四区五在线观看| 红尘影院手机在线观看| 两个人的视频hd全免费 | 777ZYZ玖玖资源站最稳定网址| 99久久精品免费精品国产| 成人免费视频在| 含羞草最新版本| 久久青青草原| 日本女人下面毛茸茸| 亚洲精品视频久久| 2020国产欧洲精品视频| 短篇合集纯肉高H深陷骚| 果冻传媒我的女老板| 蜜芽tv在线观看免费网站| 三级黄色高清视频| 亚洲一卡二卡三卡四卡无卡麻豆| 9420高清完整版在线电影免费观看| 成人国产在线24小时播放视频| 国内精品欧美久久精品| 男人和女人全黄一级毛片| 无码11久岁箩筣| 2018年免费三级av观看| 国产成人高清视频| 久久婷婷国产五月综合色啪最新 | 国产成人精品男人的天堂网站| 国产综合91| 捏奶动态图吃奶动态图q| 台湾佬休闲中性娱乐网| 伊人久久国产免费观看视频| 被窝国产理论一二三影院| 狠狠狠狠狠狠干| 啪啪做羞羞事小黄文| 亚洲精品视频在线观看视频|