我眼中的AMetal

既然AMetal打破了传统嵌入式编程的依靠单个硬件编程弊端,采用面向对象的C编程的方式来实现“一次编程,到处使用”的效果。那到底是如何实现的呢?自己手中没有NXP的平台,只有STM32F3/F4,A8,还有新塘,倒是有块飞思卡尔,但不在身边。这样就没法直接看效果了,只能边摸索,边修改,移植到STM32上了。

也是对照《AMetal框架与接口编程》这本书来弄的,只记录自己的思路历程。

先以最简单的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位于/interface下

辅助宏定义也是定义引脚的功能和模式宏。am_gpio_util.h位置同上。

用户配置文件:提供硬件操作函数接口。am_hwconf_lpc82x_gpio.c位于\board\am824_core\ametal_book\user_config\am_hwgconf_usrcfg

似乎接口层与用户配置文件功能相似,有什么不同呢?还有驱动层的宏定义与接口层的宏义有什么不同呢?

答:一个是接口.h文件一个是实现.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文件夹)。只有设备驱动文件夹是需要重写的,其他直接用就可以。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guangod

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值