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

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

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

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

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

GReq_mcu168 ? 來源:嵌入式在左C語言在右 ? 作者:嵌入式在左C語言在 ? 2021-09-05 09:53 ? 次閱讀

嵌入式軟件開發(fā),包括單片機(jī)開發(fā)中,軟件架構(gòu)對于開發(fā)人員是一個必須認(rèn)真考慮的問題。

軟件架構(gòu)對于系統(tǒng)整體的穩(wěn)定性和可靠性是非常重要的,一個合適的軟件架構(gòu)不僅結(jié)構(gòu)清晰,并且便于開發(fā)。

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

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

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

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

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

三種常用的軟件架構(gòu)有:順序執(zhí)行的前后臺系統(tǒng)、時間片輪詢系統(tǒng)和多任務(wù)操作系統(tǒng)。為了讓大家有一個更為清晰的認(rèn)識,我分別用三種軟件架構(gòu)對一個實(shí)例進(jìn)行介紹說明。這個實(shí)例如下:它有4個任務(wù),這4個任務(wù)為按鍵掃描、聲光報警、顯示屏刷新和超聲波測距。這個實(shí)例的具體功能是通過按鍵設(shè)置測量距離的閾值,當(dāng)測距距離低于設(shè)置的閾值時,觸發(fā)聲光報警并且將測量距離實(shí)時顯示在顯示屏上(這個應(yīng)用是汽車倒車?yán)走_(dá)的具體體現(xiàn))。

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

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

577adc22-0db1-11ec-8fb8-12bb97331649.jpg

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

578a28e4-0db1-11ec-8fb8-12bb97331649.jpg

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

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

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

時間片輪詢法實(shí)際上通常出現(xiàn)在操作系統(tǒng)中,也就是說他屬于操作系統(tǒng),但在這里所說的是基于前后臺系統(tǒng)的時間片輪詢。

時間片輪詢法的實(shí)質(zhì)其實(shí)就是選出一個定時器,每進(jìn)一次定時中斷對計數(shù)值進(jìn)行自加,在主循環(huán)中根據(jù)這個計數(shù)值執(zhí)行任務(wù),這個計數(shù)值也就是任務(wù)輪詢的時間片。

在這個實(shí)例中,如果采用時間片輪詢系統(tǒng)的話,首先選用主控芯片的任一定時器,定時器定時時間周期由我們決定,為了保證實(shí)時性和運(yùn)行效率,這個值通常取10ms、30ms、50ms等,我會將按鍵掃描輪值值設(shè)置為20ms,因為按鍵抖動的時長一般為20ms,這樣處理既達(dá)到了消抖的目的,又不會漏掉按鍵的檢測;

而顯示屏的刷新設(shè)置為30ms,如果你覺得刷新反應(yīng)慢了也可以修改這一輪詢值得到改善;而超聲波測距的輪詢值設(shè)置為100ms,即每隔100模式觸發(fā)測距一次,這個測距頻率已經(jīng)能夠滿足大多數(shù)的情況了。

程序代碼如下:

5797edd0-0db1-11ec-8fb8-12bb97331649.jpg

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

57a2ab9e-0db1-11ec-8fb8-12bb97331649.jpg

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

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

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

操作系統(tǒng)的本身是一個比較復(fù)雜的東西,任務(wù)的管理和調(diào)度實(shí)現(xiàn)的底層是很復(fù)雜和困難的。

但是,我們一般都是把操作系統(tǒng)本身作為一個工具一個平臺,我們的目的是使用它的功能而不是開發(fā)一個操作系統(tǒng)。

我使用過ucosfreertos小型的實(shí)時操作系統(tǒng),也使用過Linux大型的操作系統(tǒng),有了操作系統(tǒng),不管是對于程序的穩(wěn)定性和開發(fā)的效率都會好很多。

我們在使用操作系統(tǒng)的時候更多的需要去學(xué)習(xí)和理解它的一些調(diào)度和通信的方式。

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

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

57bedd0a-0db1-11ec-8fb8-12bb97331649.jpg

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

57ec53c0-0db1-11ec-8fb8-12bb97331649.jpg

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

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

我使用過多種不同MCU做項目開發(fā),例如:STM32、STC15、新唐等,也接觸過復(fù)雜的設(shè)計需求,例如:車載智能系統(tǒng)和智能家居,跑過操作系統(tǒng)ucos、freertos和Linux等等,在回到裸機(jī)開發(fā)時,就會不然而然的去思考完整系統(tǒng)的軟件架構(gòu)的設(shè)計問題,相信在讀者中開發(fā)裸機(jī)的也占大多數(shù)。

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

那接下來我們來對具體的應(yīng)用場景進(jìn)行分析;

在一些邏輯清晰功能單一的系統(tǒng)中就很適合選擇順序執(zhí)行的前后臺架構(gòu),這個軟件架構(gòu)往往能夠滿足我們大部分的需求,比如電飯煲、電磁爐和聲控?zé)襞莸龋?/p>

在一些資源缺乏的單片機(jī)并且對系統(tǒng)可靠性要求較高的情況下非常適合,因為這種方法的系統(tǒng)耗費(fèi)比較小,只是犧牲了一個定時器而已,但是選擇此種程序架構(gòu)需要我們對時間片進(jìn)行深思熟慮的劃分;

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

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

來源:嵌入式在左C語言在右
鏈接:https://www.toutiao.com/i6804446207872598539/

責(zé)任編輯:haq

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

    關(guān)注

    6035

    文章

    44554

    瀏覽量

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

    關(guān)注

    5082

    文章

    19104

    瀏覽量

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

    關(guān)注

    37

    文章

    6801

    瀏覽量

    123283

原文標(biāo)題:太棒了!這幾個嵌入式程序架構(gòu)很好用

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

收藏 人收藏

    評論

    相關(guān)推薦

    一文了解嵌入式軟件開發(fā)的對象

    以前應(yīng)用場景很單一,嵌入式開發(fā)可能談不上面向?qū)ο?b class='flag-5'>開發(fā)。但現(xiàn)在,做嵌入式開發(fā),沒有面向?qū)ο?b class='flag-5'>開發(fā),你就有點(diǎn)落伍了。 本文結(jié)合個人經(jīng)驗和周立功《抽象接口技術(shù)和組件
    的頭像 發(fā)表于 11-15 10:31 ?324次閱讀
    一文了解<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件開發(fā)</b>的對象

    你認(rèn)為嵌入式軟件開發(fā)的盡頭是什么?

    嵌入式軟件開發(fā)的“盡頭”是一個富有哲理且多維度的概念,因為它不僅關(guān)乎技術(shù)發(fā)展的極限,還涉及到行業(yè)應(yīng)用、市場需求、技術(shù)融合與創(chuàng)新等多個方面。從幾個不同的視角來看
    的頭像 發(fā)表于 09-18 09:42 ?462次閱讀
    你認(rèn)為<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件開發(fā)</b>的盡頭是什么?

    嵌入式開發(fā)常用軟件有哪些?

    嵌入式開發(fā)常用軟件有哪些? 對于初學(xué)嵌入式的朋友們,會想要了解嵌入式軟件開發(fā)常用的軟件有些,有什
    發(fā)表于 09-09 15:22

    嵌入式系統(tǒng)中的實(shí)時操作系統(tǒng)

    嵌入式RTOS是嵌入式應(yīng)用程序運(yùn)行、相互交互和與外界通信的底層軟件機(jī)制。在本節(jié)中,您將了解嵌入式軟件開發(fā)
    的頭像 發(fā)表于 08-20 11:28 ?480次閱讀

    節(jié)點(diǎn)、跨平臺開發(fā),AWFlow讓嵌入式開發(fā)變得更簡單

    國產(chǎn)化趨勢對嵌入式軟件開發(fā)構(gòu)成挑戰(zhàn),導(dǎo)致軟件移植和適配需求激增,影響開發(fā)效率。AWFlow軟件通過節(jié)點(diǎn)化和跨平臺
    的頭像 發(fā)表于 08-02 08:25 ?361次閱讀
    節(jié)點(diǎn)<b class='flag-5'>式</b>、跨平臺<b class='flag-5'>開發(fā)</b>,AWFlow讓<b class='flag-5'>嵌入式開發(fā)</b>變得更簡單

    嵌入式軟件開發(fā)與AI整合

    嵌入式軟件開發(fā)與AI整合是當(dāng)前技術(shù)發(fā)展的重要趨勢之一。隨著人工智能技術(shù)的快速發(fā)展,嵌入式系統(tǒng)越來越多地集成了AI算法,以實(shí)現(xiàn)更復(fù)雜的智能功能。以下是關(guān)于嵌入式
    的頭像 發(fā)表于 07-31 09:25 ?696次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件開發(fā)</b>與AI整合

    嵌入式軟件開發(fā)招聘

    本帖最后由 jf_19082533 于 2024-7-26 13:56 編輯 尋求:嵌入式軟件工程師 要求:3年以上開發(fā)經(jīng)驗,音視頻領(lǐng)域應(yīng)用層開發(fā) 地址:北京市昌平區(qū) 郵箱:10
    發(fā)表于 07-26 13:44

    嵌入式系統(tǒng)怎么學(xué)?

    人類社會朝著更加智能、便利、高效的方向發(fā)展。在未來,嵌入式軟件開發(fā)人員也需要不斷學(xué)習(xí)和適應(yīng)新技術(shù),以滿足不斷變化的市場需求。
    發(fā)表于 07-02 10:10

    AMD Vitis? Embedded嵌入式軟件開發(fā)套件的功能和特性概述

    Vitis Embedded 是一款獨(dú)立的嵌入式軟件開發(fā)套件,主要用于為 AMD 自適應(yīng) SoC 和 FPGA 中的 AMD 嵌入式處理子系統(tǒng)(基于 ARM 的子系統(tǒng)和 AMD MicroBlaze)
    的頭像 發(fā)表于 04-08 10:50 ?918次閱讀
    AMD Vitis? Embedded<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件開發(fā)</b>套件的功能和特性概述

    嵌入式軟件設(shè)計的原則分享

    嵌入式軟件開發(fā)如果具有更好的閱讀性、擴(kuò)展性以及維護(hù)性,就需要考慮很多因素。今天給大家分享幾個嵌入式軟件設(shè)計的原則。
    發(fā)表于 02-25 10:54 ?679次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>設(shè)計的原則分享

    嵌入式軟件開發(fā)應(yīng)該掌握哪些知識?

    嵌入式軟件開發(fā)應(yīng)該掌握哪些知識? 一、 什么是嵌入式軟件嵌入式軟件通常是指
    發(fā)表于 02-19 11:23

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

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

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

    嵌入式Linux開發(fā)主要有三種方式:裸機(jī)開發(fā)、SDK開發(fā)和驅(qū)動開發(fā)
    的頭像 發(fā)表于 01-22 14:22 ?961次閱讀

    聊一聊嵌入式C語言

    作為一名嵌入式軟件開發(fā)者,熟練掌握嵌入式C語言對我的日常工作至關(guān)重要。
    的頭像 發(fā)表于 01-22 09:28 ?543次閱讀

    基于功能安全的汽車嵌入式軟件單元驗證技術(shù)研究

    隨著汽車嵌入式軟件功能的不斷疊加,軟件復(fù)雜性不斷提升,對汽車嵌入式軟件的安全性提出了更高要求,基于功能安全的
    的頭像 發(fā)表于 01-07 11:27 ?1046次閱讀
    基于功能安全的汽車<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>單元驗證技術(shù)研究
    主站蜘蛛池模板: 久久精品国产亚洲AV忘忧草蜜臀| 年轻的搜子8中字在线观看| 日本九九热在线观看官网| 一二三区乱码不卡手机版| 公粗挺进了我的密道在线播放贝壳 | gogogo免费视频观看| 果冻传媒视频在线播放 免费观看 果冻传媒视频在线播放 | 被室友C哭调教双性| 久久亚洲成a人片| 亚洲福利视频导航| 穿着丝袜被男生强行啪啪| 麻豆国产自制在线观看| 亚洲精品视频在线免费| 国产精品国产三级国AV在线观看 | 亚洲中文无码永久免费| 国产精品人妻系列21P| 青青青手机视频| 99国产热视频在线观看| 久久婷婷五月综合色丁香| 亚洲精品高清在线观看| 国产精品99亚发布| 日本久久频这里精品99| a久久99精品久久久久久蜜芽| 可以看的黄页的网站| 一二三四视频免费社区5| 国产午夜理论片YY8840Y| 天美麻豆成人AV精品视频| 俺也去最新地址| 欧美熟妇VIVOE精品| 777久久人妻少妇嫩草AV| 久久婷婷五月综合色情| 孕交videosgratis乌克兰| 和尚扒开双腿蹂躏| 亚洲国产高清福利视频| 国产免费69成人精品视频| 忘忧草下载| 国产精品v欧美精品v日韩| 日日操夜夜摸| 电影内射视频免费观看| 日韩精品亚洲专区在线影院| 床上色APP下载免费版 |