[资料分享] MPLAB® Harmony之学习篇(八)--利用Harmony的demo集成自己的应用

橙色凯   2016-11-30 13:23 楼主
本文转自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]

回复评论 (2)

通过本文了解了如何利用MPLAB® Harmony已有的应用示例集成自己的应用,首先让我们清楚地了解Harmony框架下提供的应用示例及其架构,然后详细地讲解如何利用Harmony下已有的应用示例来集成用户自己的应用程序。
Harmony框架下的应用程序是经过重构的,重构后的应用程序,软件都是模块化,易于软件功能的添加和删除。在harmony框架下用户创建自己的应用程序在MHC中选择系统软件模块,驱动、系统服务、操作系统、TCPIP协议栈等;另外编写应用程序,app_initialize和app_task,通过API调用系统软件实现功能。
利用Harmony下已有的应用示例来集成用户自己的应用程序需要两步:
一、将多个已有例的底层软件(系统代码和软件库)通过MHC集成到一起;
二、将多个app.c和app.h,添加到同一个工程里,并修改相应的函数和文件名。
软件环境准备有Harmony v1.06.02及MPLAB X v3.20 和 MPLABv3.26,硬件则是PIC32MZ EF starter kit。文中详细地介绍了集成步骤,清晰讲述了利用MPLAB Harmony框架下已有的应用示例集成自己的应用。

静坐得幽趣,清游快此生。
点赞  2016-12-2 16:11
针对pic单片机来说,这个MPLAB这个软件是非常不错的,包括编译,调试仿真挺不错的一个工具,儿利用Harmony框架来集成自己的应用,非常方便的,并且生成底层驱动等等对于初学者来说都是非常容易上手的
点赞  2016-12-15 22:26
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复