基于MDK开发的TencentOS-Tiny Software Pack
2021腾讯犀牛鸟开源人才培养计划
2021/9/24
项目导师:TencentOS tiny核心架构师 汪礼超
项目学员:东南大学 崔林威
Email:1797878653@qq.com
TencentOS tiny物联网操作系统软件包-GitHub
软件包测试程序地址(Gitee)
MDK5 Software Packs软件包地址(已上传到ARM官网)
摘要
腾讯物联网操作系统(TencentOS tiny)是腾讯面向物联网领域开发的实时操作系统,具有低功耗,低资源占用,模块化,可裁剪等特性。TencentOS tiny提供了最精简的 RTOS 内核,内核组件可裁剪可配置,可灵活移植到多种终端 MCU上。而且,基于RTOS内核,提供了COAP/MQTT/TLS/DTLS等常用物联网协议栈及组件,方便用户快速接入腾讯云物联网通信IoT Hub。同时,TencentOS tiny为物联网终端厂家提供一站式软件解决方案,方便各种物联网设备快速接入腾讯云,可支撑智慧城市、智能水表、智能家居、智能穿戴、车联网等多种行业应用。
为了减少开发人员移植TencentOS tiny到ARM内核的单片机上的开发时间,本文研究了ARM软件包的制作、设计了TencentOS Tiny软件包的架构,最终基于MDK完成了第三方TencentOS Tiny pack和软件包的封装,并详细介绍了软件包在ARM内核、厂商芯片和单片机上的移植测试过程。从而用户在安装了本软件包后,能够使用MDK pack直接生成适合不同MCU的TencentOS Tiny工程。
目录
1、ARM软件包介绍
1.1 软件包简介
1.2 软件包开发
1.2.1 软件包开发过程
1.2.2 PDSC文件的编写
1.2.3 生成软件包
2、TencentOS-tiny软件包
2.1 软件包内容
2.2 软件包安装
3、软件包测试
3.1 ARM内核移植TencentOS tiny软件包
3.2 STM32不依赖裸机工程移植
3.3 单片机裸机工程移植
4、总结
5、开发参考
6、附录-移植配置参考
6.1 MDK5.14版本移植到ARM内核
6.1.1 Cortex-M0内核移植
6.1.2 Cortex-M0+内核移植
6.1.3 Cortex-M3内核移植
6.1.4 Cortex-M4内核移植
6.1.5 Cortex-M7内核移植
6.2 MDK5.14版本移植到基于ARM内核的芯片
6.2.1 移植到stm32f103c8芯片
6.2.2 移植到stm32f767igt芯片
6.3 MDK5.30和MDK5.35版本移植(Cortex-M0+、0、3、4、7内核和芯片)
6.4 MDK5.30和MDK5.35版本移植(Cortex-M23、33)
6.4.1 Cortex-M23内核移植
6.4.2 Cortex-M33内核移植
1、ARM软件包介绍
1.1 软件包简介
在进行嵌入式软件开发时,ARM为我们提供了软件包功能,能够将软件算法等模块进行集成封装,从而方便第三方用户使用。ARM软件包能够为微控制器设备和开发板提供支持,包含软件组件(Software Component)如驱动程序和中间件,还可以包含示例项目和代码模板等,主要有以下类型的软件包:
(1) 器件系列包(Device Family Pack):由硅供应商或工具供应商生成,为特定的目标微控制器创建软件应用提供支持;
(2) 板级支持包(Board Support Pack):由电路板供应商发布,为安装在电路板上的外围硬件提供软件支持;
(3) CMSIS软件包:由ARM提供,包括对CMSIS核心、DSP和RTOS的支持;
(4) 中间件包(MiddlewarePack):由芯片供应商、工具供应商或第三方创建;通过提供对常用软件组件(如软件堆栈、特殊硬件库等)的软件集成,从而减少开发时间;
(5) 内部组件(In-house components):由工具用户开发,用于内部或外部分发。
软件组件包括以下几部分:
(1) 源代码、库、头文件/配置文件和文档;
(2) 完整的示例项目,展示了软件组件的使用,可以下载并在评估硬件上执行;
(3) 代码模板,方便使用软件组件。
一个完整的软件包是一个ZIP文件,包含所有需要的软件库和文件,以及一个包含软件包所有信息的包描述文件(PDSC文件),软件包的结构是在CMSIS中定义的(http://www.keil.com/CMSIS/Pack)。
1.2 软件包开发
1.2.1 软件包开发过程
软件包的开发过程相当于完成了一项产品的制作,因此引入产品生命周期管理(PLM)的概念,PLM包括以下四个阶段:
(1)概念的产生,基于软件包需求进行产品定义,并创建第一个功能原型;
(2)设计,根据技术特征和要求,进行原型测试和产品的实施,通过广泛的测试验证产品的功能与规格;
(3)发布,产品被制造出来并推向市场;
(4)服务,对产品的维护,包括对客户的支持,最后不断优化,结束产品的周期。
在制作软件包时,主要面临以下几个过程:
图1.1 软件包开发流程
首先,根据特定组件生成软件包即根据需求将相应的头文件、库文件等软件组件利用PDSC文件进行组织,在组织完成后即可利用软件包生成工具生成对应版本的软件包,然后对新生成的软件包进行测试,给出示例测试程序,再将其包含如PDSC文件中,最后经测试完成后生成最终的软件包。
1.2.2 PDSC文件的编写
PDSC文件时基于可扩展标记语言(XML)进行编写的,能够将软件包包含的各个模块按照特定的格式组织起来,接下来按照PDSC文件的结构对文件的编写进行详细介绍:
首先是PDSC文件的开头,前两句是声明为XML格式,它是在MDK中的PACK.xsd文件定义的,所以不用修改;<name>
和<vendor>
标签定义了软件包的基本内容,也用于PACK文件的文件名,故该PDSC文件应命名为Tencent.TencentOS-tiny.pdsc;<description>
标签描述了软件包的信息,它将显示在包安装程序中;<url>
标签可以包含一个带有软件包下载链接的网址,方便用户下载;<license>
标签包含了用户使用该软件包时需要遵守的协议,<supportContact>
标签表示软件包的支持人员联系方式,可以提供一个电子邮件地址或网页URL。如图1.2为下列代码对应的软件包界面。
<?xml version="1.0" encoding="utf-8"?>
<package schemaVersion="1.0" xmlns:xs=http://www.w3.org/2001/XMLSchema-instance xs:noNamespaceSchemaLocation="PACK.xsd">
<name>Tencent</name>
<description>Description of your pack</description>
<vendor>TencentOS-tiny</vendor>
<url>https://github.com/OpenAtomFoundation/TencentOS-tiny</url>
<license>LICENSE.txt</license>
<supportContact>1797878653@qq.com</supportContact>
图1.2 程序对应的软件包
接下来是PDSC文件的各个模块,<releases>
标签定义了软件包的版本,开发者可以在版本更新时在此进行标注,从而在生成软件包时,系统会自动生成最新版本的软件包;
<releases>
<release version="1.0.1">
Sep/3/2021, version name
</release>
<release version="1.0.0">
Sep/1/2021, version name
</release>
</releases>
<taxonomy>
标签用于定义每个组件的description,如图1.3所示,通过下列代码中的Cclass、Cgroup和Csub来确定description所在的位置,doc用于指定description文件(也可以不加),然后添加description的名字。
<taxonomy>
<description Cclass="TencentOS tiny" Cgroup="xx" Csub="xx" doc="examples/index.html">TencentOS tiny