我眼中的AMetal

2021-09-29 20:52:34 字數 1375 閱讀 1561

既然ametal打破了傳統嵌入式程式設計的依靠單個硬體程式設計弊端,採用物件導向的c程式設計的方式來實現「一次程式設計,到處使用」的效果。那到底是如何實現的呢?自己手中沒有nxp的平台,只有stm32f3/f4,a8,還有新塘,倒是有塊飛思卡爾,但不在身邊。這樣就沒法直接看效果了,只能邊摸索,邊修改,移植到stm32上了。

先以最簡單的gpio看一下ametal的架構:如圖

hw層直接操作晶元實現介面層所列功能,amhw_lpc82x_gpio.h位於soc/nxp/drivers/include/gpio/hw下.soc檔案存放的是與晶元相關的檔案。

驅動層其實是提供了外設初始化函式。無非就是初始化io。am_lpc82x_ghio.h位於soc/nxp/drivers/include/gpio

輔助巨集定義檔案提供了引腳的一些配置巨集定義,am_lpc82x_gpio_util.h位置同上。

介面層對外設抽象,實現外設功能函式的api。am_gpio.h位於/inte***ce下

輔助巨集定義也是定義引腳的功能和模式巨集。am_gpio_util.h位置同上。

使用者配置檔案:提供硬體操作函式介面。am_hwconf_lpc82x_gpio.c位於\board\am824_core\ametal_book\user_config\am_hwgconf_usrcfg

似乎介面層與使用者配置檔案功能相似,有什麼不同呢?還有驅動層的巨集定義與介面層的巨集義有什麼不同呢?

答:乙個是介面.**件乙個是實現.c檔案。驅動層,具體到硬體平台,介面層只是對功能方面的巨集定義。

nxp平台的庫下下來看了下,周立功的這套ametal沒有直接的引用官方的庫,而是在官方庫架構的基礎上(只是引用了些底層的操作部分相當於hw層)按照以上ametal三層需要,重寫了個操作庫,同時檢視野火的nxp教程,也可以了解到nxp庫與stm32的庫不同,自由度更大些。所以不能按照操作stm32的方式來認識nxp晶元。

基於以上的分析,周立功自創庫的話,那如何移到stm32呢?

先總結下ametal的認知:

1、它是基於晶元的外設,抽象出「服務」這個概念以建庫目的的,服務可以理解為功能。

2、「服務」作為標準,一系列的介面就產生了,只要是按照服務介面操作格式,就可以適用於底層的任意硬體。面向介面程式設計。

3、ametal其實就是一套介面規範,非常適合於庫比較自由的晶元開發。說到底,其實就是標準化了功能,是對功能的乙個積累。

了解下呼叫的流程:實際入口在am_prj_config.c裡的main();---->呼叫板級初始化函式 am_board_init()---->再呼叫服務函式(service資料夾)----->裝置驅動(drivers資料夾)。只有裝置驅動資料夾是需要重寫的,其他直接用就可以。

我,眼中的詩歌

我,眼中的詩歌 給我一杯茶,乙個幽靜的地方,我好看些詩歌。寫前面 詩歌是一種態度。詩歌是燕子低低地飛過屋簷。詩歌是古代西方 盛行的決鬥。詩歌是人類本身一直都存在的 極為樸素的一種本能。詩歌和性別無關 和身材無關,和你曾看過多少書也沒有直接的 聯絡,造物主將嘴巴賦予人類的同時 也賦予了人類詩歌。詩歌是...

我眼中的委託

首先委託是乙個型別,和int string一樣,我們日常說的委託其實是委託型別的變數,委託的作用就是把方法當成引數來傳遞,將方法賦值給委託型別的變數,然後由這個變數去呼叫執行方法。換個方式,委託沒有具體實現體,因為委託就是叫別人去辦事,自己當然不需要實現了,但是委託別人必須要清楚自己想辦什麼事,這個...

我眼中的Spring MVC

spring mvc 是應用於web應用程式 mvc架構的 c 首先說一下spring mvc框架文件中的一句話 對擴充套件開放 對修改閉合 那麼特點就來了 高擴充套件性 這是它最大的特點還有 友好的設計的結構,思想,引數繫結,允許其他mvc的實現等等 總的來就是簡單易用 在這裡只是簡單介紹一下有哪...