chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

固件模塊可以分為哪幾種類型?

GReq_mcu168 ? 來源:玩轉(zhuǎn)單片機(jī) ? 作者:玩轉(zhuǎn)單片機(jī) ? 2020-07-01 17:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

為什么寫本文?做公號兩月,遇到一些初學(xué)單片機(jī)的同學(xué),剛剛?cè)胧肿?a href="http://www.brongaenegriffin.com/v/tag/586/" target="_blank">單片機(jī)開發(fā),還沒有涉及到使用RTOS,且剛?cè)胧种苯由蟁TOS可能會有些難度,有的使用的相對較老單片機(jī)資源還有限,也不適合跑RTOS?;蛘呤褂肦TOS,在整體思路上比較迷茫,不知從何入手,所以本文來聊聊我對單片機(jī)程序的整體框架設(shè)計(jì)的一些思路體會。

為啥要討論架構(gòu)單片機(jī)系統(tǒng)開發(fā)人員的目標(biāo)之一是在編程環(huán)境中創(chuàng)建固件,以實(shí)現(xiàn)低成本系統(tǒng)、軟件可靠性以及快速的開發(fā)迭代時(shí)間。實(shí)現(xiàn)這種編程環(huán)境的最佳方法實(shí)踐是使用統(tǒng)一的固件架構(gòu)體系結(jié)構(gòu),該體系結(jié)構(gòu)在產(chǎn)品開發(fā)過程中充當(dāng)框架并支持“固件模塊化”,或稱為子系統(tǒng)。

如果不采用統(tǒng)一的設(shè)計(jì)架構(gòu),那么其業(yè)務(wù)需求耦合關(guān)系復(fù)雜,不采用先設(shè)計(jì)-后開發(fā)的方法論,想到哪里寫到哪里,則程序后期維護(hù)將變得異常艱辛,而引入潛在bug/缺陷的風(fēng)險(xiǎn)也將大大增加,且不具備多人協(xié)同開發(fā)的可能。

可以結(jié)合固件模塊化、可測試性和兼容性的正確組合的設(shè)計(jì)體系架構(gòu)結(jié)構(gòu)應(yīng)用于任何固件開發(fā)項(xiàng)目,以最大程度地提高代碼可復(fù)用性,加快固件調(diào)試速度并提高固件可移植性。

模塊化架構(gòu)設(shè)計(jì)?模塊化編程將程序功能分解為固件模塊/子系統(tǒng),每個模塊執(zhí)行一個功能,并包含完成該功能所需的所有源代碼和變量。

固件模塊可以分為哪幾種類型?

模塊化/子系統(tǒng)化有助于協(xié)調(diào)團(tuán)隊(duì)中許多人的并行工作,管理項(xiàng)目各個部分之間的相互依賴關(guān)系,并使設(shè)計(jì)人員、系統(tǒng)集成人員能夠以可靠的方式組裝復(fù)雜的系統(tǒng)。具體來說,它可以幫助設(shè)計(jì)人員實(shí)現(xiàn)和管理復(fù)雜性。隨著應(yīng)用程序的大小和功能的增長,需要模塊化才能將它們分成單獨(dú)的部分(無論是作為“組件”,“模塊”還是“子系統(tǒng)”)。然后,每個這樣分離的部分就成為模塊化體系結(jié)構(gòu)的一個元素。這樣,可以使用定義明確的界面隔離和訪問每個組件。此外,模塊化編程可提高固件的可讀性,同時(shí)簡化固件的調(diào)試,測試和維護(hù)。

即便是一個人獨(dú)立開發(fā)一個項(xiàng)目,這樣做依然在代碼的調(diào)試、可讀性、可移植性方面是最佳實(shí)踐的整體策略。如果代碼設(shè)計(jì)良好,則在其他項(xiàng)目可以輕松應(yīng)用。而且模塊經(jīng)過上一項(xiàng)目的測試驗(yàn)證,在新的項(xiàng)目中再次應(yīng)用其缺陷風(fēng)險(xiǎn)將大幅降低。所以每做一個項(xiàng)目,以這種策略不斷積累模塊“輪子”組件,隨著經(jīng)驗(yàn)的增長,積累的“輪子”就越來越多,也越來越好。所以其優(yōu)點(diǎn)是顯而易見的,否則每做一個項(xiàng)目,都從輪子造起,開發(fā)時(shí)間長不說,開發(fā)水平也得不到提高,重復(fù)性工作也很枯燥。比如前文中談到的非易失存儲管理子系統(tǒng),如設(shè)計(jì)良好,就變成一個可靠的可移植的輪子。這段話請深入理解,并拿走不謝!

固件模塊原理固件開發(fā)中模塊化編程的基本概念是創(chuàng)建固件模塊。從概念上講,模塊代表關(guān)注點(diǎn)分離。在計(jì)算機(jī)科學(xué)中,關(guān)注點(diǎn)分離是將計(jì)算機(jī)程序分解為功能很少重疊的獨(dú)特功能的過程。關(guān)注點(diǎn)是程序的任何關(guān)注點(diǎn)或功能,并且與功能或行為同義。關(guān)注點(diǎn)分離的發(fā)展傳統(tǒng)上是通過模塊化和封裝來實(shí)現(xiàn)的,其實(shí)也就是解耦思想。

固件模塊可以分為幾種類型:

與很多上層用戶模塊都有關(guān)的代碼被實(shí)現(xiàn)為單獨(dú)的固件模塊。常見的如底層硬件相關(guān)的抽象實(shí)現(xiàn)。例如,hal_adc.c 是ADC用戶模塊的固件模塊,而hal_timer.c是Timer用戶模塊的固件模塊。

用于特定純軟件算法的代碼被實(shí)現(xiàn)為單獨(dú)的固件模塊。 例如,alg_filter.c是執(zhí)行軟件過濾器(例如中值過濾器,均值過濾器或加權(quán)均值過濾器、IIR/FIR濾波)的固件模塊。

特定應(yīng)用程序的代碼實(shí)現(xiàn)為單獨(dú)的固件模塊。 例如,app_battery.c是電池充電器應(yīng)用程序的固件模塊。特定工具的代碼實(shí)現(xiàn)為單獨(dú)的固件模塊。例如,debug_print.c是用于實(shí)現(xiàn)日志打印功能的固件模塊。

實(shí)施估計(jì)模塊化設(shè)計(jì)的一些規(guī)則:

所有與模塊相關(guān)的功能都應(yīng)集成到單個源文件中,這是高內(nèi)聚的體現(xiàn)。

模塊對外提供一個頭文件,該文件聲明了該模塊的所有資源(硬件依賴/宏/常量/變量/函數(shù))。盡量用struct將緊密相關(guān)的變量進(jìn)行集總封裝。

在源文件中包括自檢代碼部分,以實(shí)現(xiàn)該模塊模塊的所有自檢功能。

固件模塊的接口應(yīng)經(jīng)過精心設(shè)計(jì)和定義。

由于固件取決于硬件,因此需要在源文件頭中明確提及硬件的相關(guān)性。比如利用宏將硬件依賴轉(zhuǎn)定義,或者利用函數(shù)將基本操作進(jìn)行封裝。則在新的架構(gòu)體系,僅僅需要移植這部分實(shí)現(xiàn)即可使用。

通常,固件模塊可供其他團(tuán)隊(duì)成員在其他項(xiàng)目中使用。可能涉及到管理更改,缺陷修復(fù)、所有者應(yīng)維護(hù)模塊。源文件頭應(yīng)包含“作者”和“版本”信息。

固件在某種程度上取決于編譯器。源文件頭中應(yīng)聲明基于什么開發(fā)環(huán)境進(jìn)行過驗(yàn)證,以指定編譯器或與IDE相關(guān)的信息。

需要注意的是,模塊化設(shè)計(jì)會引入一些調(diào)用開銷,也可能增加固件尺寸大小。在實(shí)際實(shí)現(xiàn)時(shí),折中考量。不要過度模塊化,所以建議采用高內(nèi)聚、低耦合的實(shí)現(xiàn)策略。在前面文章中有談到過的呼吸機(jī)PB560的設(shè)計(jì),看過其代碼,本打算解讀一下其代碼設(shè)計(jì),但讀下來發(fā)現(xiàn),其設(shè)計(jì)過度模塊化了,沒有實(shí)現(xiàn)高內(nèi)聚的思想。其源代碼很多源文件僅僅實(shí)現(xiàn)了一個函數(shù),而不是把一類問題集中抽象實(shí)現(xiàn),后來就放棄了其代碼解讀。

如何拆分模塊?做工程開發(fā),一定是需求驅(qū)動的。第一件事需要對需求有比較清晰的認(rèn)知,然后才能設(shè)計(jì)一個比較合理的框架。我們需要實(shí)現(xiàn)什么?大致總體設(shè)計(jì)過程策略我的基本采用如下圖所示思路(我比較喜歡繪圖,圖會讓人比較直觀)

固件模塊可以分為哪幾種類型?

問自己第一個問題是:這個項(xiàng)目要實(shí)現(xiàn)什么主要功能?這個來自哪里?如果是實(shí)際產(chǎn)品開發(fā),則可能來自市場的需求,如果是自己的DIY項(xiàng)目,也一定會YY出一個大致的想法?總之不管源自何方,需求總要先梳理清楚。那么需求一般意義上包含哪些呢?

哪些是硬件IO接口需求,比如開關(guān)量輸入,ADC采樣,I2C/SPI通信等等

哪些是業(yè)務(wù)邏輯需求,比如要采集一個傳感器量數(shù)據(jù),控制一個加熱裝置,那么這是高內(nèi)聚的需求。

哪些是算法相關(guān)的技術(shù)需求,比如產(chǎn)品中哪些信號需要濾波處理,哪些需要做頻域分析等等。

是否有對外的通信協(xié)議需求。

是否有業(yè)務(wù)數(shù)據(jù)需要?dú)v史存儲,或者設(shè)備參數(shù)需要掉電保存

是否需要有日志打印需求。

不一而足。

結(jié)合固件模塊原理以及相關(guān)指導(dǎo)原則,那么將相關(guān)性高的需求,抽象實(shí)現(xiàn)在一系列的模塊中,在由這一系列模塊配合實(shí)現(xiàn)某個相關(guān)性高的業(yè)務(wù)需求,再進(jìn)一步這些模塊就變成一個子系統(tǒng)。多個子系統(tǒng)在main.c的調(diào)度下,協(xié)調(diào)完成產(chǎn)品的整體功能。

如何集成調(diào)度對于某些不使用RTOS的應(yīng)用而言,可以使用如下的框架進(jìn)行:

void main(void)

/*各模塊初始化*/

init_module_1();

init_module_2();

while(1)

/*實(shí)現(xiàn)一個定時(shí)調(diào)度策略*/

if(timer50ms)

timer50ms = 0;

app_module_1();

if(timer100ms)

timer100ms = 0;

app_module_2();

/*異步請求處理,如中斷后臺處理*/

if(flag1)

communication_handler();

對于基于RTOS的集成實(shí)現(xiàn)舉例:

void task1(void)

/*處理子系統(tǒng)相關(guān)的初始化*/

init_task1();

while(1)

/*應(yīng)用相關(guān)調(diào)用*/

task1_mainbody();

void taskn(void)

/*處理子系統(tǒng)相關(guān)的初始化*/

init_taskn();

while(1)

/*應(yīng)用相關(guān)調(diào)用*/

taskn_mainbody();

void main(void)

/*一些基本硬件相關(guān)初始化,比如IO,時(shí)鐘,OS tick定時(shí)器等*/

init_hal();

/*一些基本RTOS初始化*/

init_os();

/*任務(wù)創(chuàng)建*/

os_creat(“task1”,task1,棧設(shè)置,優(yōu)先級,。..);

os_creat(“taskn”,taskn,棧設(shè)置,優(yōu)先級,。..);

/*啟動OS調(diào)度器,交由OS調(diào)度管理應(yīng)用任務(wù)*/

os_start();

具體不同的RTOS,其函數(shù)名各有不同,但大致思路一般都差不多。

總結(jié)一下本文從為什么需要模塊化設(shè)計(jì)整體架構(gòu),到這樣做的好處,以及具體做的一些指導(dǎo)原則,再到實(shí)際中如何實(shí)現(xiàn),怎么做到高內(nèi)聚低耦合,提供了一些個人工作中的體會以及思路。同時(shí)對于裸機(jī)程序整體框架、基于RTOS的集成框架做了兩個demo,基本能解決大部分的框架思路問題。將前文中的一些個人推崇的原則,在加粗總結(jié)下:

所有與模塊相關(guān)的功能都應(yīng)集成到單個源文件中,這是高內(nèi)聚的體現(xiàn)。

模塊對外提供一個頭文件,該文件聲明了該模塊的所有資源(硬件依賴/宏/常量/變量/函數(shù))。盡量用struct將緊密相關(guān)的變量進(jìn)行集總封裝。

在源文件中包括自檢代碼部分,以實(shí)現(xiàn)該模塊模塊的所有自檢功能。

固件模塊的接口應(yīng)經(jīng)過精心設(shè)計(jì)和定義。

由于固件取決于硬件,因此需要在源文件頭中明確提及硬件的相關(guān)性。比如利用宏將硬件依賴轉(zhuǎn)定義,或者利用函數(shù)將基本操作進(jìn)行封裝。則在新的架構(gòu)體系,僅僅需要移植這部分實(shí)現(xiàn)即可使用。

通常,固件模塊可供其他團(tuán)隊(duì)成員在其他項(xiàng)目中使用。可能涉及到管理更改,缺陷修復(fù)、所有者應(yīng)維護(hù)模塊。源文件頭應(yīng)包含“作者”和“版本”信息。

固件在某種程度上取決于編譯器。源文件頭中應(yīng)聲明基于什么開發(fā)環(huán)境進(jìn)行過驗(yàn)證,以指定編譯器或與IDE相關(guān)的信息。
責(zé)任編輯:pj

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

    關(guān)注

    6071

    文章

    45259

    瀏覽量

    660140
  • 編程
    +關(guān)注

    關(guān)注

    89

    文章

    3704

    瀏覽量

    96274
  • RTOS
    +關(guān)注

    關(guān)注

    24

    文章

    856

    瀏覽量

    122206
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    單模光纖線有幾種類型

    單模光纖線根據(jù)ITU-T國際標(biāo)準(zhǔn)(G.65x系列)主要分為以下六種類型,每種類型在傳輸性能、應(yīng)用場景和成本上存在差異: G.652(常規(guī)單模光纖): 核心特性:零色散波長在1310nm附近
    的頭像 發(fā)表于 09-11 10:00 ?576次閱讀

    固態(tài)電容按照介質(zhì)種類分為哪幾種?

    固態(tài)電容按照介質(zhì)種類主要分為 鉭介質(zhì)固態(tài)電容、鋁介質(zhì)固態(tài)電容、陶瓷介質(zhì)固態(tài)電容(MLCC雖屬陶瓷電容,但部分特殊結(jié)構(gòu)可視為固態(tài)電容變種)以及聚合物介質(zhì)固態(tài)電容(如導(dǎo)電高分子型) 。以下為具體分類
    的頭像 發(fā)表于 07-25 16:10 ?392次閱讀
    固態(tài)電容按照介質(zhì)<b class='flag-5'>種類</b>來<b class='flag-5'>分為</b><b class='flag-5'>哪幾種</b>?

    功率放大器通常可以分為哪幾類型

    功率放大器是一種用于增加信號功率的電子設(shè)備,常見于無線通信、音頻設(shè)備、廣播電視等領(lǐng)域。根據(jù)工作原理、電路拓?fù)浜蛻?yīng)用領(lǐng)域的不同,功率放大器可以分為種類型。下面西安安泰來介紹常見的幾類功率放大器。 A
    的頭像 發(fā)表于 03-20 11:07 ?623次閱讀
    功率放大器通常<b class='flag-5'>可以</b><b class='flag-5'>分為</b><b class='flag-5'>哪幾</b>類<b class='flag-5'>類型</b>

    分布式存儲有哪幾種類型?

    分布式存儲有哪幾種類型?分布式存儲系統(tǒng)是一種將數(shù)據(jù)分散存儲在多臺獨(dú)立節(jié)點(diǎn)上的技術(shù),根據(jù)數(shù)據(jù)模型可分為鍵值存儲、列式存儲、文檔存儲和圖形存儲等類型;按數(shù)據(jù)存儲單位可分為基于文件、塊和對象
    的頭像 發(fā)表于 02-20 11:00 ?924次閱讀

    補(bǔ)償導(dǎo)線可以當(dāng)電線用嗎,補(bǔ)償導(dǎo)線有哪幾種類型

    在電子與電氣工程領(lǐng)域,導(dǎo)線作為電能與信息傳輸?shù)幕A(chǔ)元件,其種類繁多,各具特色。補(bǔ)償導(dǎo)線與常規(guī)電線便是其中兩類,它們在功能、設(shè)計(jì)與應(yīng)用上存在顯著差異。本文將深入探討補(bǔ)償導(dǎo)線與常規(guī)電線的區(qū)別、補(bǔ)償導(dǎo)線的類型及其獨(dú)特應(yīng)用,為技術(shù)人員提供全面、準(zhǔn)確的技術(shù)指導(dǎo)。
    的頭像 發(fā)表于 01-30 15:51 ?2530次閱讀

    常見的有源變壓器有哪幾種?

    麻煩問一下大家,我們常見的有源變壓器有哪幾種?最關(guān)鍵的問題是,有源變壓器和無源變壓器建模方法相同嗎?有源變壓器如何進(jìn)行建模?真心求教,在線等,謝謝了。
    發(fā)表于 01-22 07:47

    輸入電壓達(dá)到正負(fù)5v、精度比較高最好是12bit以上的,六通道的ADC芯片一般選哪幾種?

    輸入電壓達(dá)到正負(fù)5v、精度比較高最好是12bit以上的,六通道的ADC芯片一般選哪幾種,因?yàn)锳DC之后是直接接FPGA處理的、最好是那種ADC芯片好呢、性能越好越好、
    發(fā)表于 01-22 06:47

    Aigtek:功率放大器分為哪幾種類型

    功率放大器 是一種用來將輸入信號進(jìn)行放大的電子器件。根據(jù)不同的應(yīng)用需求和工作原理,功率放大器可以分為種類型。在本文中,安泰電子將介紹一些常見的功率放大器類型。 A類功率放大器:A類功
    的頭像 發(fā)表于 11-19 11:27 ?886次閱讀
    Aigtek:功率放大器<b class='flag-5'>分為</b><b class='flag-5'>哪幾種類型</b>

    直式n公頭品種類型哪幾種

    德索工程師說道直式N公頭作為射頻同軸連接器的一種,廣泛應(yīng)用于無線通信、雷達(dá)、衛(wèi)星通信、廣播電視等多個領(lǐng)域。其品種類型多樣,主要可以從連接方式、應(yīng)用場景、頻率范圍及特殊設(shè)計(jì)等多個維度進(jìn)行分類。以下
    的頭像 發(fā)表于 11-09 09:38 ?812次閱讀
    直式n公頭品<b class='flag-5'>種類型</b>有<b class='flag-5'>哪幾種</b>

    根據(jù)云服務(wù)器的部署方式和服務(wù)對象分為幾種類型

    云服務(wù)器已經(jīng)成為現(xiàn)代企業(yè)和組織IT基礎(chǔ)設(shè)施的核心組成部分。根據(jù)云服務(wù)器的部署方式和服務(wù)對象的不同,主要可以分為種類型:公有云服務(wù)器、私有云服務(wù)器和混合云服務(wù)器。下面我們將詳細(xì)介紹這三種類型
    的頭像 發(fā)表于 11-04 10:04 ?979次閱讀

    汽車發(fā)電機(jī)可分為哪幾種類型?汽車發(fā)電機(jī)具體可分為哪些型號?

    汽車發(fā)電機(jī)是汽車電氣系統(tǒng)的重要組成部分,它負(fù)責(zé)為汽車提供穩(wěn)定的電力,以確保車輛的電氣設(shè)備正常運(yùn)行。汽車發(fā)電機(jī)的類型和型號多種多樣,根據(jù)不同的分類標(biāo)準(zhǔn),可以將其分為不同的類型和型號。以下
    的頭像 發(fā)表于 10-24 09:25 ?3255次閱讀

    淺談有刷直流電機(jī)可以分為哪幾種類型?

    中得到了廣泛的應(yīng)用。根據(jù)其結(jié)構(gòu)和應(yīng)用特點(diǎn),有刷直流電機(jī)可以分為以下幾種類型: 永磁直流電機(jī)(Permanent Magnet DC Motor,PMDC) 永磁直流電機(jī)是一種利用永磁體產(chǎn)生磁場的直流電機(jī)。它具有體積小、重量輕、效
    的頭像 發(fā)表于 10-22 16:05 ?1771次閱讀

    交流電機(jī)可分為哪幾種類型?應(yīng)用原理是什么?

    交流電機(jī)(AC Motor)是一種利用交流電作為電源的電機(jī)。根據(jù)其結(jié)構(gòu)和工作原理,交流電機(jī)可以分為以下幾種類型: 異步電機(jī)(Asynchronous Motor): 異步電機(jī),又稱感應(yīng)電機(jī),是一種
    的頭像 發(fā)表于 10-22 10:44 ?2015次閱讀

    信號線有哪幾種

    信號線是電子系統(tǒng)中用于傳輸電信號的導(dǎo)線,它們在各種電子設(shè)備和系統(tǒng)中扮演著至關(guān)重要的角色。信號線的種類繁多,根據(jù)不同的應(yīng)用場景和性能要求,可以分為以下幾類: 同軸電纜 : RG系列 :這是最常
    的頭像 發(fā)表于 10-21 10:19 ?4085次閱讀

    N型同軸母頭能接哪幾種類型的電纜

    德索工程師說道N型同軸母頭作為一種廣泛應(yīng)用的連接器,具有出色的電氣性能和機(jī)械穩(wěn)定性,能夠連接多種類型的電纜,以滿足不同領(lǐng)域和場景的需求。以下是對N型同軸母頭能夠連接的幾種主要電纜類型的詳細(xì)介紹
    的頭像 發(fā)表于 10-18 13:41 ?1021次閱讀
    N型同軸母頭能接<b class='flag-5'>哪幾種</b>的<b class='flag-5'>類型</b>的電纜