本文转自Microchip麦田论坛——作者:炮灰哥
通过本文希望大家了解如何利用MPLAB® Harmony已有的应用示例集成自己的应用
本文讨论以下内容:
- Harmony框架下提供的应用示例介绍及其架构
- 如何利用Harmony下已有的应用示例来集成用户自己的应用程序
Harmony框架如下图所示,接下来我们介绍一下Harmony框架下的应用示例以及如何利用已有的示例开发自己的应用程序。
Harmony框架下提供的应用示例:
Harmony下提供了很多应用程序示例。每个应用示例包含一个main函数,一个或多个独立的软件模块(设备驱动,中间件,以及系统服务)。示例展示了Harmony软件架构的各个模块是如何被上层调用的。
打开Harmony安装目录的apps文件夹(\harmony\v1_0x\apps),就可以看到如下目录结构:
- audio目录:包含所有音频处理相关的应用程序示例,包括麦克风,音频解码,USB耳机等。
- bluetooth目录:包含蓝牙相关的应用程序示例,包括基础蓝牙协议栈,蓝颜数据和蓝颜音频的应用示例。
- bootloader目录:bootloader程序是驻留在芯片中的一段代码,它可以帮用户在不用调试/编程工具的情况下,烧写、更新芯片的应用程序。该目录下的应用示例展示了通过USB,串口,以太网来烧写应用程序的bootloader,以及MZ系列芯片的LiveUpdate特性。
- crypto目录:加密程序实例。
- driver目录:动态应用实例,包括I2C,USART,SPI和NVM驱动示例,其中有静态驱动也有动态驱动。
- example目录:包括一些简单的示例,如所有硬件外设和部分系统服务等等。
- fs目录:FAT文件系统相关示例。支持的存储介质包括芯片内部Flash,SD卡和SQIFlash。
- gfx目录:图形显示相关示例,包括图形原语和控件的显示示例。
- meb_ii目录:MEB2是Microchip PIC32处理器配套开发板,具有蓝牙,WIFI,LCD显示等多种功能。
- programmer目录:包含外部Flash读写示例,可以通过它烧写外部SPI或SQI Flash。
- rtos目录:操作系统示例,包括FreeRTOS,ucOS,OpenRTOS等等。
- tcpip目录:网络相关的示例,如TCP,UDP client/server示例等。
- test目录:该目录下的示例用来测试操作系统或无操作系统下,各个软件库是否能正常工作。
- usb目录:包含大量的USB主从设备应用实例。
理解Harmony下应用示例的架构:
接下来讲一下Harmony框架下应用的结构。我们说,Harmony下的应用程序是经过重构的。重构过程如下:
之所以Harmony下的应用要满足以上结构划分,主要是因为重构后的应用程序,软件都是模块化,易于软件功能的添加和删除。系统代码和软件库是Microchip来实现的,用户只需要编写应用代码即app.c。
一个应用软件主要有这4部分组成:
- App.c:客户业务相关代码
- Main.c:Harmony下应用程序结构
- System_config目录下代码:芯片系统相关代码
- System_exception.c: 异常处理相关
- System_init.c:系统配置的外设、系统服务和其它软件建模块在这里进行初始化
- System_interrupt.c:系统中所有使能的中断处理函数
- System_task.c:各个软件模块所维护的任务
- Framework目录下的代码:主要是驱动和系统服务,也包括其他软件库如tcpip栈、RTOS等
重构过程如上图所示,其中系统代码和软件库通过MHC来添加、删除和配置。
Main函数结构如下所示:
用户在app.c中需要实现两个主要的函数app_initialize和app_task。这两个函数分别被SYS_Initialize和SYS_Tasks所调用。
总结一下,在harmony框架下用户创建自己的应用只需要两步:
- 在MHC中选择系统软件模块,驱动、系统服务、操作系统、TCPIP协议栈等;
- 编写应用程序,app_initialize和app_task,通过API调用系统软件实现功能。
如何利用Harmony下已有的应用示例来集成用户自己的应用程序:
了解了Harmony下应用软件示例的结构,就可以利用已有的应用示例轻松集成自己的应用程序。
第一步,将多个已有例的底层软件(系统代码和软件库)通过MHC集成到一起;
第二步,将多个app.c和app.h,添加到同一个工程里,并修改相应的函数和文件名为
app1.c, app2.c…appn.c
app1.h, app2.h…appn.h
app1_initialize,app1_task… appn_initialize, appn_task
其中,第一步有一个技巧,用户可以安装两个版本的MPLabX IDE,一个用来打开已有示例MHC,查看配置选项;另一个用来编辑新的工程项目。这样用户只要在自己的工程里把示例的配置选项打上勾即可。
下面我们来实现一个例子,展示代码合并的过程。例子是将usart_basic(c:\microchip\harmony\v1_06_02\apps\examples\peripheral\usart\uart_basic) 和msd_basic(c:\microchip\harmony\v1_06_02\apps\usb\host\msd_basic) 两个工程集成起来。使新的应用同时拥有USART通信和USB存储功能。
环境准备:
软件 Harmony v1.06.02
MPLAB X v3.20 和 MPLABv3.26
硬件 PIC32MZ EF starter kit
集成步骤:- 用MPLAB X v3.20打开usart_basic工程
- 用MPLAB X v3.26打开msd_basic工程,作为基线工程(即最终的工程)
- 将usart_basic工程的配置项添加到msd_basic工程中去,包括USART2pin的配置,生成底层驱动
- 将usart_basic工程中的app.c和app.h改名为app1.c和app1.h,然后添加到msd_basic工程中去。并将这两个文件中所有的app字段用app1代替。如appData改为app1Data
- 添加APP1_Task和APP1_Initialize到SYS_Task和SYS_Initialize函数中去
- 把USART中断处理函数拷贝到新的工程中,并把appData改为app1Data
- 编译、下载即可调试。此时新的工程就包含了USB存储和USART通信功能
点击查看本学习资料: MPLAB®Harmony之学习篇(八)-- 利用Harmony的demo集成自己的应用.pdf (993.58 KB) 点击下载例子程序:[local]1[/local]