在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

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

0、前言

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

我相信在嵌入式單片機(jī)軟件開發(fā)的初期大多數(shù)開發(fā)者采用的都是簡單的前后臺(tái)順序執(zhí)行架構(gòu)(我就是這樣的)。

在嵌入式軟件開發(fā)中,程序架構(gòu)主要分為三種,本篇文章將對(duì)這三種程序架構(gòu)做出詳解。

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

可以說一個(gè)好的程序架構(gòu),是一個(gè)有經(jīng)驗(yàn)的工程師和一個(gè)初學(xué)者的分水嶺。 軟件架構(gòu)對(duì)于開發(fā)人員是友好的,你希望先執(zhí)行什么任務(wù)后執(zhí)行什么任務(wù),或者這一個(gè)時(shí)間點(diǎn)執(zhí)行什么任務(wù)下一個(gè)執(zhí)行什么任務(wù),又或者什么事件會(huì)同步到某個(gè)任務(wù)等等,在不同的軟件架構(gòu)下,解決上述問題的具體方法都是有所區(qū)別的。 軟件架構(gòu)對(duì)開發(fā)者最大的幫助是: 幫助開發(fā)者掌控整個(gè)工程的框架,當(dāng)你熟練使用其中某一個(gè)程序架構(gòu)后,對(duì)于系統(tǒng)中出現(xiàn)的bug你一定能夠快速的定位并解決。 當(dāng)然,我建議要根據(jù)需要選擇合適的軟件架構(gòu)進(jìn)行開發(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)行介紹說明。這個(gè)實(shí)例如下: 它有4個(gè)任務(wù),這4個(gè)任務(wù)為按鍵掃描、聲光報(bào)警、顯示屏刷新和超聲波測距。這個(gè)實(shí)例的具體功能是通過按鍵設(shè)置測量距離的閾值,當(dāng)測距距離低于設(shè)置的閾值時(shí),觸發(fā)聲光報(bào)警并且將測量距離實(shí)時(shí)顯示在顯示屏上(這個(gè)應(yīng)用是汽車倒車?yán)走_(dá)的具體體現(xiàn))。

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

在順序執(zhí)行的前后臺(tái)系統(tǒng)中,我會(huì)把鍵盤掃描用查詢的方式放在while(1)中,而顯示屏刷新和超聲波測距使用中斷,在中斷服務(wù)函數(shù)中獲取測量距離后進(jìn)行顯示,在主函數(shù)的循環(huán)中進(jìn)行按鍵的檢測,聲光處理也放在主循環(huán)中。這樣整個(gè)程序就以變量標(biāo)志的同步方式在主循環(huán)和后臺(tái)中斷中執(zhí)行,對(duì)應(yīng)的程序代碼如圖所示:

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

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

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

順序執(zhí)行前后臺(tái)系統(tǒng)的中斷服務(wù)函數(shù) 這種架構(gòu)的優(yōu)點(diǎn)是使用簡單易于理解,而缺點(diǎn)是每個(gè)任務(wù)所占的CPU時(shí)間過長的話,會(huì)導(dǎo)致程序的實(shí)時(shí)性能差,就比如按鍵的檢測等。

時(shí)間片輪詢系統(tǒng)和多任務(wù)操作系統(tǒng)

時(shí)間片輪詢法實(shí)際上通常出現(xiàn)在操作系統(tǒng)中,也就是說他屬于操作系統(tǒng),但在這里所說的是基于前后臺(tái)系統(tǒng)的時(shí)間片輪詢。時(shí)間片輪詢法的實(shí)質(zhì)其實(shí)就是選出一個(gè)定時(shí)器,沒進(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í)長一般為20ms,這樣處理既達(dá)到了消抖的目的,又不會(huì)漏掉按鍵的檢測;而顯示屏的刷新設(shè)置為30ms,如果你覺得刷新反應(yīng)慢了也可以修改這一輪詢值得到改善; 而超聲波測距的輪詢值設(shè)置為100ms,即每隔100模式觸發(fā)測距一次,這個(gè)測距頻率已經(jīng)能夠滿足大多數(shù)的情況了。 程序代碼如下:

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

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

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

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

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

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

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

我使用過ucosfreertos小型的實(shí)時(shí)操作系統(tǒng),也使用過Linux大型的操作系統(tǒng),有了操作系統(tǒng),不管是對(duì)于程序的穩(wěn)定性和開發(fā)的效率都會(huì)好很多。我們在使用操作系統(tǒng)的時(shí)候更多的需要去學(xué)習(xí)和理解它的一些調(diào)度和通信的方式。

實(shí)際上真正能使用操作系統(tǒng)的人并不多,反而是跑裸機(jī)的占大多數(shù),這也和產(chǎn)品的具體要求有關(guān),很多簡單的系統(tǒng)只需要裸機(jī)即可滿足。

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

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

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

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

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

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

我使用過多種不同MCU做項(xiàng)目開發(fā),例如:STM32、STC15、新唐等,也接觸過復(fù)雜的設(shè)計(jì)需求,例如:車載智能系統(tǒng)和智能家居,跑過操作系統(tǒng)ucos、freertos和Linux等等,在回到裸機(jī)開發(fā)時(shí),就會(huì)不然而然的去思考完整系統(tǒng)的軟件架構(gòu)的設(shè)計(jì)問題,相信在讀者中開發(fā)裸機(jī)的也占大多數(shù)。 我認(rèn)為沒有最好的軟件架構(gòu)(程序架構(gòu)),而是只有最合適的。因?yàn)樵诓煌膽?yīng)用場景中適合采用不同的程序設(shè)計(jì),而單純的去比較哪種程序架構(gòu)是最好的沒有什么實(shí)際的意義。 那接下來我們來對(duì)具體的應(yīng)用場景進(jìn)行分析,在一些邏輯清晰功能單一的系統(tǒng)中就很適合選擇順序執(zhí)行的前后臺(tái)架構(gòu),這個(gè)軟件架構(gòu)往往能夠滿足我們大部分的需求,比如電飯煲、電磁爐和聲控?zé)襞莸龋?而在一些資源缺乏的單片機(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)、無人機(jī)等等應(yīng)用場景。 作為一名嵌入式軟件工程師,掌握這三種軟件架構(gòu)是非常有必要的,它們可以讓我們在設(shè)計(jì)程序時(shí)擁有更多的選擇和思考,而每一種不同的程序架構(gòu)都具備它自己的優(yōu)勢與不足,這需要我們?nèi)ビ眯膶?shí)踐方可體會(huì)到它的奧妙。

原文標(biāo)題:詳解嵌入式開發(fā)中的3種程序架構(gòu)

文章出處:【微信公眾號(hào):嵌入式ARM】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:湯梓紅

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

    關(guān)注

    6037

    文章

    44558

    瀏覽量

    635353
  • 嵌入式
    +關(guān)注

    關(guān)注

    5082

    文章

    19126

    瀏覽量

    305242
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3787

    瀏覽量

    81049

原文標(biāo)題:詳解嵌入式開發(fā)中的3種程序架構(gòu)

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    單片機(jī)開發(fā)中常用的三種軟件架構(gòu)

    嵌入式系統(tǒng)的軟件架構(gòu)是構(gòu)建可靠嵌入式應(yīng)用程序的關(guān)鍵。本文將探討單片機(jī)開發(fā)中常用的三種軟件架構(gòu):分層架構(gòu)、事件驅(qū)動(dòng)
    發(fā)表于 09-13 09:25 ?3291次閱讀

    三種主流芯片架構(gòu)

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

    STM32的三種boot模式介紹

    淺識(shí)STM32的三種boot模式文章目錄淺識(shí)STM32的三種boot模式任務(wù)摘要一、認(rèn)識(shí)boot1.三種BOOT模式介紹2.開發(fā)BOOT模式選擇3.STM32
    發(fā)表于 12-10 07:46

    單片機(jī)三種常用的軟件架構(gòu)

    一個(gè)合適的軟件架構(gòu)不僅結(jié)構(gòu)清晰,而且可以便于開發(fā)與維護(hù)。便于幫助開發(fā)者把握整個(gè)工程的框架三種常用的軟件架構(gòu):1.順序執(zhí)行的前后臺(tái)系統(tǒng)2.時(shí)間片輪詢系統(tǒng)3.多任務(wù)操作系統(tǒng)順序執(zhí)行的前后臺(tái)系統(tǒng)程序
    發(fā)表于 01-07 08:29

    程序三種基本結(jié)構(gòu)

    基本思想:任何程序都可以用三種基本結(jié)構(gòu)表示,限制使用無條件轉(zhuǎn)移語句(goto)結(jié)構(gòu)化程序:由三種基本結(jié)構(gòu)反復(fù)嵌套構(gòu)成的程序叫~優(yōu)點(diǎn):結(jié)構(gòu)清晰
    發(fā)表于 09-01 17:24 ?0次下載

    機(jī)載視頻圖形顯示系統(tǒng)的三種架構(gòu)及基于FPGA的設(shè)計(jì)介紹

    本文介紹了基于FPGA的機(jī)載視頻圖形顯示系統(tǒng)架構(gòu)的設(shè)計(jì)與優(yōu)化,并介紹三種系統(tǒng)架構(gòu),對(duì)系統(tǒng)各組成部分進(jìn)行了詳細(xì)的分析與概述。
    發(fā)表于 10-15 10:19 ?2次下載
    機(jī)載視頻圖形顯示系統(tǒng)的<b class='flag-5'>三種</b><b class='flag-5'>架構(gòu)</b>及基于FPGA的設(shè)計(jì)<b class='flag-5'>介紹</b>

    單片機(jī)的應(yīng)用程序架構(gòu)有哪些?三種架構(gòu)的詳細(xì)資料和代碼說明

    本人經(jīng)過摸索實(shí)驗(yàn),并總結(jié),大致應(yīng)用程序架構(gòu)三種: 1. 簡單的前后臺(tái)順序執(zhí)行程序,這類寫法是大多數(shù)人使用的方法,不需用思考程序的具體
    發(fā)表于 09-09 17:26 ?1次下載
    單片機(jī)的應(yīng)用<b class='flag-5'>程序</b><b class='flag-5'>架構(gòu)</b>有哪些?<b class='flag-5'>三種</b><b class='flag-5'>架構(gòu)</b>的詳細(xì)資料和代碼說明

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

    嵌入式或單片機(jī)軟件開發(fā)的初期大多數(shù)開發(fā)者采用的都是簡單的前后臺(tái)順序執(zhí)行架構(gòu)。在嵌入式軟件開發(fā)中,程序架構(gòu)主要分為三種,本篇文章將對(duì)這三種
    的頭像 發(fā)表于 02-11 10:19 ?2339次閱讀
    嵌入式軟件開發(fā)中<b class='flag-5'>三種</b><b class='flag-5'>程序</b><b class='flag-5'>架構(gòu)</b>

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

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

    淺析單片機(jī)三種應(yīng)用程序架構(gòu)

    在工作中經(jīng)過摸索實(shí)驗(yàn),總結(jié)出單片機(jī)大致應(yīng)用程序架構(gòu)三種: 1. 簡單的前后臺(tái)順序執(zhí)行程序,這類寫法是大多
    的頭像 發(fā)表于 04-07 09:44 ?4443次閱讀

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

    單片機(jī)軟件開發(fā)的初期大多數(shù)開發(fā)者采用的都是簡單的前后臺(tái)順序執(zhí)行架構(gòu)(我就是這樣的)。在嵌入式軟件開發(fā)中,程序架構(gòu)主要分為三種,本篇文章將對(duì)這三種
    的頭像 發(fā)表于 09-05 09:53 ?3790次閱讀
    嵌入式軟件開發(fā)<b class='flag-5'>三種</b><b class='flag-5'>程序</b><b class='flag-5'>架構(gòu)</b>詳解

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

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

    實(shí)用:牛人總結(jié)的單片機(jī)三種應(yīng)用程序架構(gòu)

    單片機(jī)大致應(yīng)用程序架構(gòu)有簡單的前后臺(tái)順序執(zhí)行程序、時(shí)間片輪詢法、操作系統(tǒng)三種
    發(fā)表于 02-08 16:39 ?11次下載
    實(shí)用:牛人總結(jié)的單片機(jī)<b class='flag-5'>三種</b>應(yīng)用<b class='flag-5'>程序</b><b class='flag-5'>架構(gòu)</b>!

    深入介紹嵌入式開發(fā)中三種不同的程序架構(gòu)

    三種常用的軟件架構(gòu)有:順序執(zhí)行的前后臺(tái)系統(tǒng)、時(shí)間片輪詢系統(tǒng)和多任務(wù)操作系統(tǒng):STM32單片機(jī)開發(fā)中的RTOS。為了讓大家有一個(gè)更為清晰的認(rèn)識(shí),我分別用三種軟件架構(gòu)對(duì)一個(gè)實(shí)例進(jìn)行
    的頭像 發(fā)表于 05-24 16:02 ?1624次閱讀

    比較三種基本電源架構(gòu)的權(quán)衡

    TI 比較了三種基本電源架構(gòu)的權(quán)衡:僅 DC/DC、僅 LDO 和 DC/DC,然后是 LDO,用于小型電池供電系統(tǒng)
    發(fā)表于 08-10 15:06 ?2419次閱讀
    比較<b class='flag-5'>三種</b>基本電源<b class='flag-5'>架構(gòu)</b>的權(quán)衡
    主站蜘蛛池模板: 成人激情在线| 一区二区亚洲视频| 高清不卡免费一区二区三区| 四虎国产欧美成人影院| 韩国一级网站| 国产精品久久久久久久牛牛| 综合网在线| 免看乌克兰a一级| 天堂8在线官网| 美女扒尿口给男人桶到爽| 欧美性一级交视频| 手机在线你懂得| 久久国产精品免费看| 六月天婷婷| 两性色午夜视频免费老司机| 九月婷婷亚洲综合在线| 久久成人网18网站| 九九福利| 性xxxxbbbb免费播放视频| 国产精品免费拍拍1000部| 91网站在线看| 色www视频永久免费| 天天搞夜夜爽| 高h肉宠文1v1男男| 国产色中色| 5555kkkk香蕉在线观看| 色综合久久九月婷婷色综合| 伊人免费网| 日本不卡专区| 国产一区二区在线不卡| 国产欧美一级片| 色天使久久| 天天拍天天干| 亚洲欧洲一区| 夜夜操网| 久久99热国产这有精品| 国产性色视频| 757福利影院合集3000| 免费观看欧美一级片| 国产午夜精品理论片| 手机在线精品视频|