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)設(shè)計(jì)之程序分層

汽車電子技術(shù) ? 來(lái)源:大橙子瘋嵌入式 ? 作者:大橙子瘋 ? 2023-02-15 14:41 ? 次閱讀

1、前言

嵌入式MCU軟件開發(fā)過(guò)程中,程序分層設(shè)計(jì)也是重中之重,關(guān)系到整個(gè)軟件開發(fā)過(guò)程中的協(xié)同開發(fā),降低系統(tǒng)軟件的復(fù)雜度(復(fù)雜問(wèn)題分解)和依賴關(guān)系、同時(shí)有利于標(biāo)準(zhǔn)化,便于管理各層的程序,提高各層邏輯的復(fù)用等。

2、分層介紹

硬件抽象層(HAL)

嵌入式開發(fā)的核心就是芯片,它提供固定的片內(nèi)資源(常用的有I/O,ISR,TIMER等,稍微好點(diǎn)的還有ADC,SPI等硬件資源,不需要芯片外圍ADC采集芯片或模擬SPI)共開發(fā)者使用。而且它具有一個(gè)很重要的特點(diǎn)就是,不隨項(xiàng)目的新增需求變動(dòng)而變動(dòng)。所以應(yīng)將其作為最底層,為上層提供基礎(chǔ)支持。

大部分情況下該層都會(huì)有芯片廠商提供相應(yīng)的庫(kù)函數(shù)包或者配置工具生成對(duì)應(yīng)API函數(shù),基本只要知道如何配置和使用就行,當(dāng)然,也有可能存在芯片廠商提供的庫(kù)函數(shù)包或配置工具配置/使用自由度不高,需要自己查看芯片寄存器手冊(cè)增加自己需要的API函數(shù)。

硬件驅(qū)動(dòng)層(HDL)

嵌入式開發(fā)通常都會(huì)使用片外資源,用來(lái)彌補(bǔ)硬件抽象層實(shí)現(xiàn)不了的功能或者需要擴(kuò)展的功能。

如AT24C02,W25Q128等常見的外圍EEPROM芯片,需要SPI通信(硬件SPI或I/O模擬的SPI)發(fā)送相應(yīng)指令驅(qū)動(dòng)該芯片,實(shí)現(xiàn)該芯片能正常工作。因此驅(qū)動(dòng)這部分的API函數(shù)實(shí)現(xiàn)程序即為硬件驅(qū)動(dòng)層。即使換了MCU,也只需將調(diào)用過(guò)硬件抽象層的API函數(shù)替換即可。

功能模塊層(FML)

硬件抽象層和驅(qū)動(dòng)層主要就是為功能模塊層提供的,實(shí)現(xiàn)該項(xiàng)目需要的基本功能。而這一層又為上層提供最基本的功能,各功能模塊之前沒有太多聯(lián)系。

比如KEY、LED和EEPROM等功能,其中LEY、LED基本調(diào)用硬件抽象層的API函數(shù)(更復(fù)雜的可能通過(guò)片外芯片獲取/控制等,因此可能也需要使用硬件驅(qū)動(dòng)層),EEPROM調(diào)用硬件驅(qū)動(dòng)層的API函數(shù),即使EEPROM芯片更換(AT24C02或W25Q128等),也不影響EEPROM之前編寫含的功能代碼程序(前提是AT24C02,W25Q128提供的API函數(shù)提供的是統(tǒng)一標(biāo)準(zhǔn))。

應(yīng)用程序?qū)樱ˋPL)

應(yīng)用程序?qū)又饕?fù)責(zé)的就是功能模塊的使用和之間的邏輯關(guān)系處理等等,比如用戶交互界面應(yīng)用程序可能需要按鍵(KEY)、指示燈(LED)、顯示屏(LCD)等,實(shí)現(xiàn)一系列的人機(jī)交互功能,通常應(yīng)用程序?qū)酉鄬?duì)于功能模塊層而言獨(dú)立性較低。

一般情況下也可細(xì)分出應(yīng)用業(yè)務(wù)層,但是對(duì)于單片機(jī)產(chǎn)品來(lái)說(shuō),這一層的必要性反而不高,分層太多,反而顯得臃腫。

3、總結(jié)

硬件抽象層和硬件驅(qū)動(dòng)層的主要區(qū)別

硬件抽象層使用的芯片內(nèi)本身的資源(芯片手冊(cè)都有介紹),而硬件驅(qū)動(dòng)層使用的是芯片本身不存在的資源,而且需要編寫相應(yīng)代碼才能實(shí)現(xiàn)的資源。

比如正點(diǎn)原子STM32CAN使用的TJA1050芯片,CAN屬于STM32的片內(nèi)資源,TJA1050屬于片外資源,但由于TJA1050不需要額外的代碼就能通過(guò)STM32中CAN本身提供API函數(shù)正常 工作;因此可以認(rèn)為TJA1050不屬于硬件驅(qū)動(dòng)層,而若使用TJA1041,則需要編寫額外代碼才能使正常工作才能使STM32中CAN本身提供API函數(shù)正常工作,因此可以將TJA1041歸為硬件驅(qū)動(dòng)層。

圖片

圖片

功能模塊層、硬件抽象層和硬件驅(qū)動(dòng)層的主要區(qū)別

功能模塊層是按照項(xiàng)目需求提取出來(lái)的功能,需要硬件抽象層和硬件驅(qū)動(dòng)層的硬件支持才能實(shí)現(xiàn),功能模塊層根據(jù)項(xiàng)目的功能需求改變而改變,而硬件抽象層和硬件驅(qū)動(dòng)層則是項(xiàng)目需求書中的功耗等硬件相關(guān)的需求變動(dòng)而改變,當(dāng)然,若子功能的增加而硬件不支持,則也需更換硬件驅(qū)動(dòng)。

比如項(xiàng)目中的數(shù)據(jù)儲(chǔ)存功能,硬件支持有AT24C02、W25Q128和芯片本身的FLASH,都可以支持?jǐn)?shù)據(jù)儲(chǔ)存功能,即使后期因?yàn)楣幕蚬?jié)約成本等問(wèn)題,硬件的更換也不影響數(shù)據(jù)儲(chǔ)存功能的實(shí)現(xiàn)(前提規(guī)劃好標(biāo)準(zhǔn)規(guī)范的API函數(shù)定義)且避免了重寫該功能代碼所帶來(lái)的各種問(wèn)題,保證了該功能的穩(wěn)定性。

4、分層結(jié)構(gòu)圖

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    16885

    瀏覽量

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

    關(guān)注

    5059

    文章

    18973

    瀏覽量

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

    關(guān)注

    116

    文章

    3756

    瀏覽量

    80753
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    嵌入式系統(tǒng)的軟件架構(gòu)設(shè)計(jì)!

    軟件架構(gòu)設(shè)計(jì)!2. 嵌入式環(huán)境下軟件設(shè)計(jì)的特點(diǎn)要談嵌入式軟件
    發(fā)表于 08-10 07:46

    嵌入式分層架構(gòu)的相關(guān)資料分享

    最近重新進(jìn)入嵌入式領(lǐng)域,有必要對(duì)嵌入式分層架構(gòu)有一個(gè)清晰的理解。經(jīng)過(guò)多方查閱以及個(gè)人的理解,本人對(duì)嵌入式
    發(fā)表于 10-28 08:42

    為何要進(jìn)行嵌入式軟件架構(gòu)設(shè)計(jì)?如何設(shè)計(jì)?

    為何要進(jìn)行嵌入式軟件架構(gòu)設(shè)計(jì)?如何進(jìn)行嵌入式軟件架構(gòu)設(shè)計(jì)?
    發(fā)表于 11-01 06:31

    嵌入式軟件架構(gòu)設(shè)計(jì)的目的及思路

    【1】架構(gòu)設(shè)計(jì)的目的1.應(yīng)用的代碼邏輯清晰,且避免重復(fù)造輪子。2.方便軟件的移植。3.最大限度地復(fù)用。4.高內(nèi)聚低耦合。 【2】嵌入式架構(gòu)思路1.功能模塊化設(shè)計(jì)獲得需求------->
    發(fā)表于 11-08 06:41

    對(duì)嵌入式系統(tǒng)中的架構(gòu)設(shè)計(jì)的理解

    【閱讀這篇文章,你能了解到什么】1. 從事嵌入式開發(fā)12年的我,對(duì)架構(gòu)設(shè)計(jì)的理解;2. 對(duì)嵌入式系統(tǒng)中的架構(gòu)設(shè)計(jì)要刻意訓(xùn)練;3. 嵌入式系統(tǒng)
    發(fā)表于 11-08 08:23

    嵌入式軟件架構(gòu)設(shè)計(jì)資料分享

    作為程序員,我覺得如果要走的更遠(yuǎn)必須要成為工程師,畢竟年齡和資歷都擺在那里了。所以就讓我這個(gè)老程序員淺談一下嵌入式軟件架構(gòu)設(shè)計(jì)。我參考的也是
    發(fā)表于 12-24 07:09

    嵌入式軟件架構(gòu)設(shè)計(jì)

    嵌入式軟件架構(gòu)的設(shè)計(jì),幫助我們建立合理,有效的軟件架構(gòu)
    發(fā)表于 11-09 17:34 ?19次下載

    ARM嵌入式應(yīng)用程序架構(gòu)設(shè)計(jì)工具-DLTools

    ARM嵌入式應(yīng)用程序架構(gòu)設(shè)計(jì)實(shí)例精講--ARM嵌入式應(yīng)用程序架構(gòu)設(shè)計(jì)工具-DLTools
    發(fā)表于 07-08 11:08 ?4次下載

    ARM嵌入式應(yīng)用程序架構(gòu)設(shè)計(jì)工具-字庫(kù)

    ARM嵌入式應(yīng)用程序架構(gòu)設(shè)計(jì)實(shí)例精講--ARM嵌入式應(yīng)用程序架構(gòu)設(shè)計(jì)工具-字庫(kù)
    發(fā)表于 07-08 11:08 ?10次下載

    ARM嵌入式應(yīng)用程序架構(gòu)設(shè)計(jì)工具

    電子專業(yè)單片機(jī)相關(guān)知識(shí)學(xué)習(xí)教材資料——ARM嵌入式應(yīng)用程序架構(gòu)設(shè)計(jì)工具
    發(fā)表于 09-13 17:23 ?0次下載

    嵌入式軟件架構(gòu)設(shè)計(jì)

    【1】架構(gòu)設(shè)計(jì)的目的1.應(yīng)用的代碼邏輯清晰,且避免重復(fù)造輪子。2.方便軟件的移植。3.最大限度地復(fù)用。4.高內(nèi)聚低耦合。?【2】嵌入式架構(gòu)思路1.功能模塊化設(shè)計(jì)? 獲得需求------
    發(fā)表于 11-03 16:36 ?10次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b><b class='flag-5'>架構(gòu)設(shè)</b>計(jì)

    嵌入式UI架構(gòu)設(shè)計(jì)漫談

    嵌入式UI架構(gòu)設(shè)計(jì)漫談
    發(fā)表于 11-03 17:36 ?15次下載
    <b class='flag-5'>嵌入式</b>UI<b class='flag-5'>架構(gòu)設(shè)</b>計(jì)漫談

    嵌入式系統(tǒng)軟件架構(gòu)設(shè)計(jì)

    嵌入式系統(tǒng)軟件架構(gòu)設(shè)計(jì)目錄1.前言42.決定架構(gòu)的因素和架構(gòu)的影響42.1.常見的誤解52.1.1.小型的系統(tǒng)不需要
    發(fā)表于 11-03 18:21 ?30次下載
    <b class='flag-5'>嵌入式</b>系統(tǒng)<b class='flag-5'>軟件</b><b class='flag-5'>架構(gòu)設(shè)</b>計(jì)

    嵌入式硬件通信接口協(xié)議-SPI(二)分層架構(gòu)設(shè)計(jì)模擬接口

    嵌入式硬件通信接口協(xié)議-SPI(二)分層架構(gòu)設(shè)計(jì)模擬接口
    發(fā)表于 12-09 12:36 ?19次下載
    <b class='flag-5'>嵌入式</b>硬件通信接口協(xié)議-SPI(二)<b class='flag-5'>分層</b><b class='flag-5'>架構(gòu)設(shè)</b>計(jì)模擬接口

    嵌入式軟件架構(gòu)設(shè)計(jì)任務(wù)調(diào)度

    嵌入式MCU軟件開發(fā)過(guò)程中,程序任務(wù)調(diào)度架構(gòu)的搭建尤為重要,直接關(guān)系到該程序能支持多少功能(隨著功能越多系統(tǒng)響應(yīng)能力越弱,好的任務(wù)調(diào)度
    的頭像 發(fā)表于 02-15 14:44 ?2135次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b><b class='flag-5'>架構(gòu)設(shè)</b>計(jì)<b class='flag-5'>之</b>任務(wù)調(diào)度