Raspberry Pi 產(chǎn)品線是一款具有無線連接功能的 10 美元個人計算機。對于業(yè)余愛好者、制造商、修補匠、黑客,以及,是的,我們中為數(shù)不多的真正努力設(shè)計“真正的”電子產(chǎn)品的人來說,這是多么美好的時光啊!
盡管 Raspberry Pi 的“通用計算”區(qū)別和微控制器 (MCU) 的“嵌入式”分類存在細微差別,但兩者的共同目標是為開發(fā)人員“控制復(fù)雜性”同時“吸引新手用戶”。每種類型的平臺都提供免費軟件工具,包括集成開發(fā)環(huán)境 (IDE)、編譯器、鏈接器、模擬器、調(diào)試器以及或多或少的開放中間件和操作系統(tǒng) (OS)。兩者都嚴重依賴于相似的(如果不相同的話)基于 GNU 的工具鏈。在中間件級別,一旦較低(直至金屬)驅(qū)動程序?qū)颖怀橄螅_源選項再次非常相似。
盡管他們的使命是通過降低復(fù)雜性來支持開發(fā)人員,但是文檔膨脹的問題在雙方都很明顯。一個完美的例子是基于 PIC 架構(gòu)的小型 8 位 MCU,PIC16F1619。PIC16F1619 MCU 用于控制小型電器,為此,它在 20 引腳封裝中僅包含 16 kB 閃存、12 個數(shù)字外設(shè)接口和大約同樣多的模擬支持模塊,但其數(shù)據(jù)表跨越 650 頁(在添加之前表征數(shù)據(jù)、圖表和圖形)。PIC16F1619 上提供的外設(shè)(例如信號測量定時器 (SMT))需要多達 50 頁,這幾乎是描述實際 PIC 內(nèi)核及其整個指令集所需的頁數(shù)的兩倍。
Raspberry Pi 方面的問題類似,只是按比例放大(高達 10 倍)。這里有幾個數(shù)據(jù)表需要考慮,每個數(shù)據(jù)表只記錄片上系統(tǒng) (SoC) 的一個組件,例如外圍設(shè)備、GPU 等。僅內(nèi)核就占據(jù)了 750 多頁。
不能指望沒有人會閱讀或簡單地跟上如此大量的信息。特別是嵌入式開發(fā)人員總是承受著巨大的壓力,要在更短的時間內(nèi)交付應(yīng)用程序以實現(xiàn)最快的上市時間。
迷失在嵌入式軟件架構(gòu)的層層中
解決信息泛濫的一種常見解決方案是使用分層架構(gòu)和抽象硬件細節(jié)的標準化外圍庫對應(yīng)用程序進行分區(qū)。這些層可以表示為一個整齊的堆棧,“應(yīng)用程序”位于硬件抽象層 (HAL) 的頂部。如果需要,可以進一步細化堆棧以識別 HAL 和其上的中間件層,以實現(xiàn)常見的服務(wù)/功能,例如網(wǎng)絡(luò)、文件系統(tǒng)和圖形用戶界面 (GUI)。
該軟件架構(gòu)模型源自“計算”世界,適用于大多數(shù)通用情況。不幸的是,它在嵌入式應(yīng)用程序中存在兩個基本缺點:
1. 分層架構(gòu)簡化了文檔膨脹問題,只要關(guān)注中間件層提供的標準功能即可。在應(yīng)用范圍的低端,中間件層非常薄,如果存在的話,結(jié)果主要是混淆。因此,開發(fā)人員必須依靠大型應(yīng)用程序編程接口 (API) 形式的 HAL 文檔,這是一個同樣龐大的材料體,可以跨越數(shù)千頁,而不會真正揭示設(shè)備的細節(jié)。當出現(xiàn)問題時,開發(fā)人員會陷入困境或被迫深入研究大量外來代碼。
2. HAL 層為標準中間件服務(wù)提供了巨大的支持,但由于其剛性性質(zhì),通常最終會抹去特定設(shè)備的獨特差異化功能。否則,這些功能可以為特定應(yīng)用程序提供技術(shù)優(yōu)勢,并且可能是首先選擇特定設(shè)備的原因。
代碼生成器:讓機器做它最擅長的事情!
由于堆疊的軟件架構(gòu)會導(dǎo)致性能損失和獨特功能的扁平化,現(xiàn)代 MCU 開發(fā)人員在使用標準化 HAL 時獲得的收益會減少。然而,強調(diào)快速開發(fā)的嵌入式控制市場的新一代代碼生成器為解決這個難題提供了一條出路。
代碼配置器/生成器做機器最擅長的事情,顯著縮短或消除重復(fù)和容易出錯的搜索數(shù)據(jù)表以配置硬件外圍設(shè)備和構(gòu)建 HAL 的過程。用戶還可以從單個代碼配置器界面了解特定的硬件外圍功能,從而完全減少對數(shù)據(jù)表的需求。因此,HAL 成為嵌入式開發(fā)項目的靈活組成部分,可以在工程師優(yōu)化應(yīng)用程序性能時快速且頻繁地重新生成。
代碼配置器工具的顯著特點包括:
· 與流行的 IDE 完全集成,允許工具(和用戶)了解項目上下文(涉及的型號/部件號、使用中的中間件庫等)
· 支持獨特而復(fù)雜的外圍設(shè)備,例如前面提到的 SMT。例如,SMT 可以在一個頁面/對話框中直觀地呈現(xiàn)給用戶,其中包括一些直觀的滾動列表和復(fù)選框(圖 2)。
· 一個模板引擎,將用戶配置轉(zhuǎn)換為一小組完全定制的函數(shù),減少必須傳遞給每個函數(shù)的參數(shù)數(shù)量,并保證大多數(shù)硬件抽象在編譯時靜態(tài)執(zhí)行。生成的 API 是最小的,需要學(xué)習(xí)的功能很少,并利用一致和直觀的命名約定。這提高了性能和代碼密度(代碼示例 1)。
· 由非常短的(C 語言)源文件組成的輸出,用戶可以完全檢查,提供學(xué)習(xí)和手動優(yōu)化的機會。現(xiàn)代代碼配置器以靈活的方式將生成的代碼與用戶代碼混合在一起,從而保持完整性并允許充分利用高級硬件功能。
【圖2 | 此處顯示的是 Microchip Technology, Inc. 的 MPLAB 代碼配置器 (MCC) 中的信號測量定時器 (SMT) 選項的屏幕截圖。
[代碼示例 1 | SMT 外圍源文件 (smt1.c) 的此示例部分顯示了 MCC 生成的代碼的節(jié)儉性。]
一旦外圍配置完成,開發(fā)人員可以立即專注于應(yīng)用程序。使用代碼生成器,嵌入經(jīng)典的“Hello, World!” 示例(總是轉(zhuǎn)換為閃爍的 LED)變成了兩行代碼練習(xí)。
[代碼示例 2 | 創(chuàng)建“Hello, World!”只需要兩行代碼。使用 MCC 的應(yīng)用程序。]
在《In 10 Lines of Code》一書中可以找到其他 20 個有效使用快速開發(fā)工具的實際示例。
審核編輯:郭婷
-
led
+關(guān)注
關(guān)注
242文章
23696瀏覽量
670859 -
mcu
+關(guān)注
關(guān)注
146文章
17831瀏覽量
360312 -
soc
+關(guān)注
關(guān)注
38文章
4335瀏覽量
221648
發(fā)布評論請先 登錄
EB Tresos狀態(tài)顯示無法運行生成器是什么原因?qū)е碌模?/a>
高可靠性嵌入式主板設(shè)計

嵌入式系統(tǒng)中的代碼優(yōu)化與壓縮技術(shù)
開源隨機數(shù)生成器庫OpenRNG助力實現(xiàn)移植到Arm平臺時的最佳性能

超詳細!FMU生成器用戶手冊來啦~

如何提高嵌入式代碼質(zhì)量?
EE-322:面向SHARC處理器的專家代碼生成器

嵌入式開發(fā)常見問題排查

使用C2000?嵌入式模式生成器(EPG)進行設(shè)計

嵌入式系統(tǒng)的未來趨勢有哪些?
ARM MCU嵌入式開發(fā) | 基于國產(chǎn)GD32F10x芯片+嵌入的開始
Freepik攜手Magnific AI推出AI圖像生成器
TSMaster 測試報告生成器操作指南

軟件架構(gòu)搞好了,還用擔心代碼可讀性差?

評論