91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

3天內不再提示

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

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

掃碼添加小助手

加入工程師交流群

為什么寫本文?做公號兩月,遇到一些初學單片機的同學,剛剛入手做單片機開發(fā),還沒有涉及到使用RTOS,且剛入手直接上RTOS可能會有些難度,有的使用的相對較老單片機資源還有限,也不適合跑RTOS?;蛘呤褂肦TOS,在整體思路上比較迷茫,不知從何入手,所以本文來聊聊我對單片機程序的整體框架設計的一些思路體會。

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

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

可以結合固件模塊化、可測試性和兼容性的正確組合的設計體系架構結構應用于任何固件開發(fā)項目,以最大程度地提高代碼可復用性,加快固件調試速度并提高固件可移植性。

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

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

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

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

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

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

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

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

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

實施估計模塊化設計的一些規(guī)則:

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

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

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

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

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

通常,固件模塊可供其他團隊成員在其他項目中使用??赡苌婕暗焦芾砀?,缺陷修復、所有者應維護模塊。源文件頭應包含“作者”和“版本”信息。

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

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

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

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

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

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

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

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

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

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

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

不一而足。

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

如何集成調度對于某些不使用RTOS的應用而言,可以使用如下的框架進行:

void main(void)

/*各模塊初始化*/

init_module_1();

init_module_2();

while(1)

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

if(timer50ms)

timer50ms = 0;

app_module_1();

if(timer100ms)

timer100ms = 0;

app_module_2();

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

if(flag1)

communication_handler();

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

void task1(void)

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

init_task1();

while(1)

/*應用相關調用*/

task1_mainbody();

void taskn(void)

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

init_taskn();

while(1)

/*應用相關調用*/

taskn_mainbody();

void main(void)

/*一些基本硬件相關初始化,比如IO,時鐘,OS tick定時器等*/

init_hal();

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

init_os();

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

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

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

/*啟動OS調度器,交由OS調度管理應用任務*/

os_start();

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

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

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

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

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

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

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

通常,固件模塊可供其他團隊成員在其他項目中使用??赡苌婕暗焦芾砀?,缺陷修復、所有者應維護模塊。源文件頭應包含“作者”和“版本”信息。

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

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

    關注

    6077

    文章

    45506

    瀏覽量

    671159
  • 編程
    +關注

    關注

    90

    文章

    3716

    瀏覽量

    97234
  • RTOS
    +關注

    關注

    25

    文章

    866

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    單相電機可以分為哪幾種類型?

    單相電機是家用電器和小型工業(yè)設備中應用最廣泛的動力裝置之一,其結構簡單、成本低廉的特點使其在220V交流電環(huán)境下具有不可替代的優(yōu)勢。根據(jù)工作原理和啟動方式的不同,單相電機主要可分為以下幾種類型
    的頭像 發(fā)表于 03-03 17:12 ?516次閱讀

    探針電池座安裝方式的差異與類型

    探針,也稱作彈簧針連接器,常用于手機這種小型電子產(chǎn)品中。探針的主體結構由針頭、彈簧、針管三部分構成。依據(jù)安裝方式的差異,探針可劃分為以下幾種類型。
    的頭像 發(fā)表于 02-26 14:24 ?187次閱讀
    探針電池座安裝方式的差異與<b class='flag-5'>類型</b>

    CW32單片機支持哪幾種開發(fā)環(huán)境,比較常用的MDK支持嗎?

    CW32單片機支持哪幾種開發(fā)環(huán)境,比較常用的MDK支持嗎。 若使用MDK開發(fā),是否也需要下載芯片包,導入到MDK中?xxx32的庫可以用嗎。
    發(fā)表于 01-26 06:14

    請問單片機開發(fā)的程序設計語言主要有哪幾種?

    單片機開發(fā)的程序設計語言主要有哪幾種?
    發(fā)表于 01-14 08:29

    電能質量在線監(jiān)測裝置的采樣模塊有哪些類型?

    電能質量在線監(jiān)測裝置采樣模塊按 測量對象 分為 電壓采樣模塊 和 電流采樣模塊 兩大類,按 接入方式 分為 直接接入式 和 間接接入式 ,按
    的頭像 發(fā)表于 12-17 15:48 ?1099次閱讀
    電能質量在線監(jiān)測裝置的采樣<b class='flag-5'>模塊</b>有哪些<b class='flag-5'>類型</b>?

    MCU固件幾種Flash(閃存)劃分方式

    你通過U盤、OTA遠程等方式下載的程序,其實你還是需要提前下載BootLoader程序,才能進一步下載APP程序。? ? ?今天就來說說通過OTA方式升級固件時,幾種Flash(閃存)劃分方式
    的頭像 發(fā)表于 11-27 18:20 ?1293次閱讀

    單模光纖線有幾種類型

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

    工業(yè)相機的類型及不同類型的應用

    工業(yè)相機根據(jù)不同的分類標準,可分為種類型,每種類型都有其獨特的應用場景。
    的頭像 發(fā)表于 08-29 17:07 ?831次閱讀
    工業(yè)相機的<b class='flag-5'>類型</b>及不同<b class='flag-5'>類型</b>的應用

    水晶頭主要有哪幾種型號

    環(huán)境中,是網(wǎng)絡連接的標準接口。 特點:支持高速網(wǎng)絡通信,具有自動防止脫落的功能,適用于連接計算機、路由器、交換機等網(wǎng)絡設備。 分類:根據(jù)網(wǎng)線類型(如五類、六類等)的不同,RJ-45水晶頭還有不同規(guī)格,如超五類水晶頭(孔徑一般是1.0mm)、六類水晶頭(孔徑一般是1.08mm
    的頭像 發(fā)表于 08-05 09:41 ?4643次閱讀

    變壓器常見類型及特點詳解

    變壓器在電力系統(tǒng)中起著重要的作用,根據(jù)不同的標準,變壓器可以分為種類型。以下是對變壓器主要類型及其特點的詳細闡述:
    的頭像 發(fā)表于 08-02 13:37 ?2073次閱讀

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

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

    聲音傳感器有哪幾種

    聲音傳感器作為將聲波信號轉換為電信號的裝置,在工業(yè)自動化、智能家居、醫(yī)療診斷等領域應用廣泛。根據(jù)工作原理和檢測目標的不同,聲音傳感器主要分為以下幾類: 一、基于壓電效應的傳感器 壓電式聲音傳感器利用
    的頭像 發(fā)表于 06-23 10:10 ?2075次閱讀

    門鈴語音芯片有哪幾種型號可以選擇?

    門鈴語音芯片的選擇可以很廣泛!因為簡單的OTP語音芯片也可以用,高級一點的FLASH語音芯片,或者在高端一點的語音識別芯片,或者集成藍牙又或者紅外等等,有非常多的方案,具體可以看自己詳細的需求。 以
    的頭像 發(fā)表于 06-09 15:58 ?734次閱讀

    電容分為哪幾種,各有什么用途呢?

    一、電容的分類? ?按介質材料分類? ?陶瓷電容?:鈦酸鋇/鈦酸鍶介質,高頻特性優(yōu),體積?。蛪?0V~100V),適用于高頻去耦和RF匹配電路。 ?電解電容?:氧化鋁/鉭氧化物介質,容量大(μF~F級),有極性,用于電源濾波和儲能。 ?薄膜電容?:聚酯/聚丙烯介質,耐壓高(kV級),低損耗,適用于交流濾波和電機驅動。 ?超級電容?:活性炭/石墨烯介質,容量達法拉級,用于能量回收和備用電源。 ?云母電容?:云母片介質,精度高(±1%),用于高頻諧振和精密儀器。 ?按結構分類? ?固定電容?:容量不可變,如瓷介電容、電解電容。 ?可變電容?:容量可手動調節(jié),用于調諧電路。 ?微調電容?:小范圍調節(jié)容量,用于電路校準。 ?按功能用途分類? ?濾波電容?:平滑電源紋波(如電解電容+陶瓷電容組合)。 ?耦合電容?:隔直通交,連接信號源與放大電路。 ?旁路電容?:為高頻信號提供低阻抗通路(如0.1μF陶瓷電容)。 ?調諧電容?:用于射頻電路頻率調整(如可變陶瓷電容)。 ?二、核心用途? ?能量存儲與釋放? 電解電容和超級電容用于電源儲能、瞬時大電流放電。 ?信號處理? 耦合電容傳輸交流信號,隔斷直流分量。 旁路電容抑制高頻噪聲,提升信號完整性。 ?電路保護? 安規(guī)電容(X/Y電容)抑制EMI,保護電源輸入端。 ?三、典型應用場景? ?消費電子? 手機/平板:多層陶瓷電容(MLCC)用于高頻去耦。 快充設備:電解電容濾波,超級電容快速充放電。 ?工業(yè)設備? 電機驅動:薄膜電容耐高壓,用于逆變器濾波。 電力系統(tǒng):直流干式電容器用于STATCOM補償無功功率。 ?通信與射頻? 調諧電容選擇振蕩頻率,云母電容穩(wěn)定高頻電路。 ?四、選型要點? ?高頻電路?:優(yōu)選低ESR的陶瓷電容或云母電。 ?高精度場景?:云母電容或CBB電容(誤差±1%)。
    發(fā)表于 06-05 15:29

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

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