![](media/354799faf95c55a28fe89a774163e7c7.png) # 基于MDK开发的TencentOS-Tiny Software Pack TencentOS-Tiny software package based on MDK development [(English Documents Available)](README_EN.md) 2021/9/3 东南大学 导师:汪礼超 学员:崔林威 Email:1797878653@qq.com 目录 [1、ARM软件包介绍](#1arm软件包介绍) [1.1 软件包简介](#11-软件包简介) [1.2 软件包开发](#12-软件包开发) [1.2.1 软件包开发过程](#121-软件包开发过程) [1.2.2 PDSC文件的编写](#122-pdsc文件的编写) [1.2.3 生成软件包](#123-生成软件包) [2、TencentOS-tiny软件包](#2tencentos-tiny软件包) [2.1 软件包内容](#21-软件包内容) [2.2 软件包安装](#22-软件包安装) [3、软件包测试](#3软件包测试) [3.1 ARM内核移植TencentOS tiny软件包](#31-arm内核移植tencentos-tiny软件包) [3.2 STM32不依赖裸机工程移植](#32-stm32不依赖裸机工程移植) [3.3 单片机裸机工程移植](#33-单片机裸机工程移植) [4、总结](#4总结) [5、开发参考](#5开发参考) [6、附录-移植配置参考](#6附录-移植配置参考) [6.1 MDK5.14版本移植到ARM内核](#61-mdk514版本移植到arm内核) [6.1.1 Cortex-M0内核移植](#611-cortex-m0内核移植) [6.1.2 Cortex-M0+内核移植](#612-cortex-m0内核移植) [6.1.3 Cortex-M3内核移植](#613-cortex-m3内核移植) [6.1.4 Cortex-M4内核移植](#614-cortex-m4内核移植) [6.1.5 Cortex-M7内核移植](#615-cortex-m7内核移植) [6.2 MDK5.14版本移植到基于ARM内核的芯片](#62-mdk514版本移植到基于arm内核的芯片) [6.2.1 移植到stm32f103c8芯片](#621-移植到stm32f103c8芯片) [6.2.2 移植到stm32f767igt芯片](#622-移植到stm32f767igt芯片) [6.3 MDK5.30和MDK5.35版本移植(Cortex-M0+、0、3、4、7内核和芯片)](#63-mdk530和mdk535版本移植cortex-m00347内核和芯片) [6.4 MDK5.30和MDK5.35版本移植(Cortex-M23、33)](#64-mdk530和mdk535版本移植cortex-m2333) [6.4.1 Cortex-M23内核移植](#641-cortex-m23内核移植) [6.4.2 Cortex-M33内核移植](#642-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) 中间件包(Middleware Pack):由芯片供应商、工具供应商或第三方创建;通过提供对常用软件组件(如软件堆栈、特殊硬件库等)的软件集成,从而减少开发时间; (5) 内部组件(In-house components):由工具用户开发,用于内部或外部分发。 软件组件包括以下几部分: (1) 源代码、库、头文件/配置文件和文档; (2) 完整的示例项目,展示了软件组件的使用,可以下载并在评估硬件上执行; (3) 代码模板,方便使用软件组件。 一个完整的软件包是一个ZIP文件,包含所有需要的软件库和文件,以及一个包含软件包所有信息的包描述文件(PDSC文件),软件包的结构是在CMSIS中定义的()。 ## 1.2 软件包开发 ### 1.2.1 软件包开发过程 软件包的开发过程相当于完成了一项产品的制作,因此引入产品生命周期管理(PLM)的概念,PLM包括以下四个阶段:(1)概念的产生,基于软件包需求进行产品定义,并创建第一个功能原型;(2)设计,根据技术特征和要求,进行原型测试和产品的实施,通过广泛的测试验证产品的功能与规格;(3)发布,产品被制造出来并推向市场;(4)服务,对产品的维护,包括对客户的支持,最后不断优化,结束产品的周期。 在制作软件包时,主要面临以下几个过程: ![](media/b2be2d798f47f13077e4eafee94fad29.png) 图1.1 软件包开发流程 首先,根据特定组件生成软件包即根据需求将相应的头文件、库文件等软件组件利用PDSC文件进行组织,在组织完成后即可利用软件包生成工具生成对应版本的软件包,然后对新生成的软件包进行测试,给出示例测试程序,再将其包含如PDSC文件中,最后经测试完成后生成最终的软件包。 ### 1.2.2 PDSC文件的编写 PDSC文件时基于可扩展标记语言(XML)进行编写的,能够将软件包包含的各个模块按照特定的格式组织起来,接下来按照PDSC文件的结构对文件的编写进行详细介绍: 首先是PDSC文件的开头,前两句是声明为XML格式,它是在MDK中的PACK.xsd文件定义的,所以不用修改;\和\标签定义了软件包的基本内容,也用于PACK文件的文件名,故该PDSC文件应命名为Tencent.TencentOS-tiny.pdsc;\< description \>标签描述了软件包的信息,它将显示在包安装程序中;\标签可以包含一个带有软件包下载链接的网址,方便用户下载;\< license \>标签包含了用户使用该软件包时需要遵守的协议,\< supportContact \>标签表示软件包的支持人员联系方式,可以提供一个电子邮件地址或网页URL。如图1.2为下列代码对应的软件包界面。 \ \ xs:noNamespaceSchemaLocation="PACK.xsd"\> \Tencent\ \Description of your pack\ \TencentOS-tiny\ \[https://github.com/OpenAtomFoundation/TencentOS-tiny](https://github.com/OpenAtomFoundation/TencentOS-tiny)\ \LICENSE.txt\ \…\ ![](media/d014da7b13995d39b87cefa44a147e03.png) 图1.2 程序对应的软件包 接下来是PDSC文件的各个模块,\标签定义了软件包的版本,开发者可以在版本更新时在此进行标注,从而在生成软件包时,系统会自动生成最新版本的软件包; \ \ Sep/3/2021, version name \ \ Sep/1/2021, version name \ \ \标签用于定义每个组件的description,如图1.3所示,通过下列代码中的Cclass、Cgroup和Csub来确定description所在的位置,doc用于指定description文件(也可以不加),然后添加description的名字。 \ \TencentOS tiny\ \ \ ![](media/814a3eecfc04f2bbc24108cedce23ebf.png) 图1.3 \标签 \< keywords \>标签定义了软件包的关键词,在ARM官网下载软件包时可利用关键词搜索到需要的软件包。 \ \Tencent\ \ \< requirements \>标签定义了软件包的关联安装需求,即在安装本软件包时,还需要在网上安装其他包(网址:MDK5 Software Packs (keil.com)),例如下面的定义则需要我们安装ARM的CMSIS5.7.0软件包。 \ \ \ \ \ 接下来是\标签,该标签在设计\时使用,用以说明软件包中各个组件的依赖关系,即使用本组件还需要选择其他组件。在该标签下可以定义多个condition,每个condition可以定义多个条件。其中\表示条件名,\为条件信息,然后便是定义的条件,其中\表示该条件时可选的,当同时存在多个\时,用户需要至少满足其中一个条件才可以使用;\表示该条件是必选的,否则便无法使用相应的组件。在条件内部,包含一些特定的指示性语法,如果在设计\的时候开发者选择了名为Cortex_M0的条件,那么用户在使用该\时,则需要遵守条件要求:其中\表示用户选择ARM-Cortex M0内核时才会触发该条件,\为条件嵌套,表示用户还需要满足嵌套条件对应的要求,\表示用户还需要选择core组件。 \ \ \ Cortex-M0\ \ \ \< require Tcompiler="ARMCC"/\> \ \ \ \\ \