MPLAB® Harmony之学习篇(五)-- 认识Harmony驱动和系统服务
[复制链接]
本文转自Microchip麦田论坛——作者:炮灰哥
通过本文希望大家了解MPLAB® Harmony的框架的组成模块有一个系统的概念,并对驱动和系统服务有个初步的认识。
本文讨论以下内容:
- Harmony的主要软件模组
- Harmony中的驱动
- Harmony中的系统服务
Harmony框架如下图所示,主要由六类软件模块组成:
- PLIB – 外设库,实现直接对外设寄存器的访问;
- Driver – 驱动,为上层应用提供访问外设的接口函数;
- SystemService – 系统服务,管理芯片中的公共资源;
- Middleware – 中间件,主要是一些复杂协议栈和软件库,如TCPIP,USB,GFX等等;
- RTOS – 操作系统,Harmony包含多种操作系统,例如FreeRTOS,uCOS;
- OSAL – 操作系统抽象层,主要负责内存的分配,并提供多线程保护机制。
下面我们将重点介绍驱动和系统服务这两类软件模块。
驱动
驱动介绍:
设备驱动为外设抽象出一套良好定义,简单的函数接口。上层应用程序可以通过这些函数和外设进行互操作。
Harmony中的驱动主要提供以下功能: ◆ 为外设提供抽象的方法; ◆ 控制上层应用访问外设; ◆ 管理外设工作的状态机变换。
下图阐明了驱动如何和系统其他组件进行互动:
应用程序调用函数接口来应用驱动所提供的服务;
◆ 驱动调用所需的系统服务来和其他驱动共享资源; ◆ 驱动同时调用PLIB来直接访问外设寄存器; ◆ 驱动的状态机维护任务会被系统任务所调用,从而保证外设工作状态实时被刷新维护。
驱动所提供的函数接口可以分为下列两类:系统操作和用户操作。
◆ 系统操作接口:
- DRV__Initialize:外设硬件的初始化
- DRV__Reinitialize:用给定数据重新初始化外设
- DRV__Deinitialize:去初始化外设实例,关闭相应硬件
- DRV__Status:可以查询当前外设是否完成初始化,重新初始化或去初始化
- DRV__Tasks:用来维护驱动的状态机
◆ 用户操作接口:
- DRV__Open:打开一个驱动的实例供应用程序使用
- DRV__Close:关闭一个驱动的实例
- DRV__ClientStatus:给应用提供驱动的状态
- DRV__:这是驱动程序接口的基本格式,驱动接口都要符合这个格式
Harmony所包含的驱动类型:
打开MHC,可以看到Harmony Framework下共包含26种驱动,如下图所示。其中包括PIC32 MCU自身外设如SPI,USART;以及PIC32MCU开发板上常用的器件,如PHY,Codec芯片等。
系统服务
系统服务介绍: 系统服务提供了通用的功能,帮助不同的驱动或其他软件模块来访问共享的资源。
系统服务是Harmony框架中的软件模块,同其他模块一样,如驱动,中间件。通常它管理一个具体的硬件并同时提供访问服务给多个软件模块。
Timer系统服务的应用示例: 如下图所示,TCPIP协议栈,USB协议栈和GFX库都需要定时功能,如果它们都用Timer2来实现此功能就会产生冲突,其结果必将导致整个系统无法正常工作。
系统服务程序解决此类问题。正是因为系统服务实现了对共享资源(时钟,中断,定时器…)的操作并提供了通用的软件接口,其他模块就不需要直接访问这些共享资源,从而减少了系统冲突。
Harmony所包含的系统服务类型:
打开MHC,可以看到Harmony Framework下共包含16种系统服务,如下图所示。
总之,驱动和系统服务都是Harmony框架下的软件模块,供其他软件模块或上层应用调用,可以通过MHC轻松的添加或去除;不同在于,系统服务不会提供一套文件系统访问样式的接口函数,因此没有open,close,read和write函数。
希望通过介绍,大家能对驱动和系统服务有个初步的认识。
|