keil CMSIS PACK制作中文 手册

本文深入探讨了CMSIS-Pack文档的结构、组件、设备支持、板级支持等内容,详细指导了创建软件包的步骤及注意事项,适用于CMSIS-Package的开发者与使用者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CMSIS-Pack 文档

CMSIS-Pack描述了一个软件组件,设备参数和评估板板级支持之间交互机制。基于xml的包描述文件(PDSC)描述一个软件的内容包(文件集合),包括:

•源代码,头文件和软件库

•文档和源代码模板

•设备以及启动代码和编程算法参数

•示例项目

完整文件与PDSC文件的打包收集在ZIP格式的软件包。所述PDSC文件被设计为软件开发环境,并描述了用户和设备相关的上下文中这样的软件包提供的文件。软件包可用于多种用途(见下文)。

安装软件包后,所有附带的软件组件提供给开发工具。软件组件的源模块,头和配置文件,以及库的集合。包含软件组件包也可以包括示例项目和用户代码模板。

软件包使用案例

上图显示了以下使用情况的软件包:

•器件系列包(DFP):包含CMSIS系统/启动文件,驱动程序和闪存算法微控制器器件系列。

•CMSIS软件包:包含由ARM提供的通用CMSIS组件(CORE,DSP库和RTOS实施)。

•中间件包:包含属于中间件软件组件(如源代码或库)。

•板级支持包(BSP):包含文档,图表,以及一定的开发板的驱动程序。

•内部软件包:通常包含可公司或工程集团内的分布式软件组件。

注意

软件包可以解决多个用例在同一时间

 

以下各节给你的基础知识的详细信息:

•创建软件包解释需要创建一个软件包,一般的步骤。

•包装用的软件组件提供了在PDSC文件的内容的详细信息。

•包与设备支持的描述器件系列包(指定联络点)的额外要求。

•包带板支持涵盖了创建板级支持包(BSP的)。

•组为例说明了软件包的例子,它是CMSIS包更详细的一部分。

•发布包显示发布包的选项。

•工具,用于创建包迎合的是创建一个包时有用的程序。

•包装说明(*.PDSC)格式描述了可以在一个PDSC文件中使用的所有XML元素。

•配置向导注解可用于创建GUI的像在开发工具的配置文件的元素。

 

有关CMSIS-Pack文件存在于以下ARM CMSIS::目录:

文件夹

内容

Utilities

实用工具用于创建包

Pack\Example

参考软件包

Pack\Tutorials

教程创建包

 

创建软件包

该CMSIS-Pack格式用于实现一个软件包,旨在为可扩展性为未来的需求。它提供了一个管理流程,支持工具的独立分布:

 

•针对特定设备,设备支持工具链和软件应用:

  •关于处理器和它的功能的信息。

  •C和汇编文件,设备启动和访问内存映射外设寄存器。

  •参数,技术信息,以及关于器件系列的数据表和具体的设备。

  •设备描述和可用的外设。

  •内部和外部的RAM和ROM的地址范围的内存布局。

  •编程设备flash算法。

  •调试和跟踪配置以及系统视图描述文件的存储设备特定的显示映射外设寄存器。

 

 

在原型阶段快速开发的板级支持:

  •关于开发板和它的功能的信息。

  •参数,技术资料以及有关的电路板,安装的微控制器和外围设备的数据表。

  •用于板载外围设备驱动程序

 

•软件组件简化了软件的再使用和第三方软件的管理。它们包括:

  •源模块,头文件和配置文件,以及库的集合。

  •软件,包括功能和API的文档。

 

•应用程序编程接口中指定的一个或多个API,用于软件组件的另一个软件包的一部分。

 

•示例项目可以作为类似应用的基准和起点。它们包括:

  •完全定义在指定的构建和调试环境中工作的开箱即用的应用项目。

  •关于这个例子的目的,如何构建,配置和执行应用程序的文档。

 

•用户代码模板有助于了解一个软件组件的基本概念,并更好地向用户提供一个良好的起点,实现了他的申请。

 

创建一个包的步骤

下图显示了需要创建一个软件包的基本步骤:

1.产生输入:创建将被包被传递的文件。

2.组织文件:使用目录来分隔包的内容。

3.创建 PDSC文件:将基于XML的文件PDSC可以用任何文本编辑器创建。编辑器可以在包的早期开发阶段通过验证XML代码对纲要文件来帮助找到可能的bug。

4.Generate PACK:任何压缩工具支持ZIP格式可以用来创建一个包文件。 PackCheck.exe对包的内容验证有用。

 

以下页面将展示如何从头开始创建软件包。软件组件包页面将以仅含有PDSC文件和一个软件组件的简单包开始,然后将详细解释包内的更多元件。设备支持包页面加上一个DFP有的需求信息,板级支持包将详细阐述特定BSP内容。

包装规范

 

属于某个软件包的所有文件压缩成使用标准ZIP文件格式*.PACK文件。每个软件包的内容在包描述(*.PDSC)文件,是每个包的一部分描述。请参阅包装说明(*.PDSC)格式的更多信息。

 

软件包都必须有一个唯一的文件名下面这个命名约定:

<vendor>.<name>.<version>.pack.

其中:

•<vendor>是软件包的供应商或销售商的名称。

•<name>是软件包的名称。这是供应商的责任,以确保独特的包名。

•<version>指定软件包的版本号。

•.pack是文件扩展名识别软件包

<vendor>, <name>, and <version> 在 PDSC 文件中声明。

PDSC文件需要驻留在包文件的顶层,用它作为对所有文件引用的根目录。

包教程

在ARM ::CMSIS包包含了下面几页解释教程。在\ CMSIS\包\教程目录中的以下三个ZIP文件可供选择:

ZIP 文件

文档

Pack_with_Software_Components.zip

软件组件包

Pack_with_Device_Support.zip

器件支持包

Pack_with_Board_Support.zip

板级支持包

软件组件包

这部分是一个教程,介绍了如何创建一个软件包。最初,创建软件包用一个简单的PDSC文件,该文件只包含一个软件组件。然后这个软件包扩展到显示各种功能的描述软件组件。

准备工作

1.在电脑上创建一个工作目录,例如C:\TEMP\working。

2.在ARM::CMSIS包里进入目录 \CMSIS\Pack\Tutorials安装使用。请咨询您的开发工具的文档上的包安装目录结构的详细信息。在一个标准的μVision安装,你会发现它下面的C:\Keil_v5\ ARM\Pcak\ ARM\ CMSIS\Version。

3.打开Pack_with_Software_Components.zip文件.

4.复制ZIP文件中的01_Create_PDSC目录的内容到你的工作目录。

5.确保文件/目录没有写保护(删除只读标志)。

6.在ARM:: CMSIS Pack安装目录CMSIS\:Utilities将列文件复制到您的工作目录:

◦PackChk.exe

◦PACK.xsd

创建PDSC文件

1.用编辑器打开vendor.packname.pdsc文件并改变它像这样:

<?xml version="1.0"encoding="UTF-8"?>

<package schemaVersion="1.2"xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"xs:noNamespaceSchemaLocation="PACK.xsd">

<vendor>MyVendor</vendor>

<name>MyPack</name>

<description>InternalSoftware Pack</description>

<url></url>

<supportContact></supportContact>

<license>Docs\license.txt</license>

注意:在此所有代码的实施例和下面的各节可以在01_Create_PDSC目录snippets.xml文件中找到

一个PDSC文件以XML版本和编码信息开始。在<package>部分声明架构文件,用于验证PDSC文件(因此复制PACK.xsd文件到工作目录)的XSD文件的版本:

◦<name>指定包的名称

◦<description>描述了包中的几句话

◦<vendor>规定了包的供应商的名称

◦<url>定义包的下载URL(可能为空)

注意:在本教程中,未指定的URL。这意味着包将被标记的包安装程序为脱机,需要手动更新。要解决这个问题,就可以指定文件“下载”使用文件URI位置。对于Windows用户来说,这看起来像下面这样:

 

<url>file:///c:/temp/working</url>

 

◦<supportContact>对包的具体问题/问题可以提供一个电子邮件地址或网页URL

◦<license>包的安装过程中会显示一个可选许可文件。如果许可协议不被接受,安装开发工具将中止。

 

 

 

2.增加发布信息和关键字:

<releases>

<release version="1.0.0"date="2015-03-09">

Initial version

</release>

</releases>

<keywords>

<keyword>MyVendor</keyword>

<keyword>My SoftwareComponent</keyword>

</keywords>

<releases>部分信息将用于:

◦决定包的版本(需要的包文件的文件名)

◦发布信息显示

 

<keywords>可以赋予搜索引擎更好的可视性

3.添加<components>部分有以下几点:

 

<components>

<component Cclass="MyClass" Cgroup="MyGroup" Csub="MySubGroup" Cversion="1.0.0">

<description>MySWComp</description>

<files>

<file category="doc"name="Docs\MySWComp.htm"/>

<file category="header"name="MySWComp\header_mylib.h"/>

<file category="header" name="MySWComp\config_mylib.h" attr="config" version="1.0.0"/>

<file category="source"name="MySWComp\mylib_one.c"/>

<file category="source"name="MySWComp\mylib_two.c"/>

</files>

</component>

</components>

在<components>的更多信息将在SoftwareComponents部分给出。保存文件并关闭编辑器。在接下来的部分中,一个包的生成将进行详细说明。

 

生成一个包

1.重命名文件vendor.pack_name.pdsc为MyVendor.MyPack.pdsc。

2.从您的工作目录在文本编辑器重打开批处理文件gen_pack.bat。检查下面的代码行反映您的设置:

“C:\ Program Files\7-Zip\ 7z.exe”一%PACKNAME%Files-tzip

如果你没有7-Zip在你的电脑上安装,您可以指定任何其他ZIP工具,支持命令行调用。在这种情况下,你必须相应地调整命令行参数。

3.保存gen_pack.bat,您可以通过双击或使用该建议看PackChk.exe的输出命令行执行它(在文件的位置打开一个命令行窗口,然后输入gen_pack.bat )。该批处理文件将:

◦检查PDSC文件的可用性

◦复制PDSC文件到文件目录

◦在文件目录运行PackChk.exe

◦在工作目录创建一个包文件。它会被称为MyVendor.MyPack.1.0.0.pack。

4.通过双击它来注册包。取决于所使用的开发软件,包内容的显示可能有所不同:

 

软件组件

一个组件列出了属于它和相关的项目中的文件。组件本身或每个单独的文件涉及到condition必须解析是真的;如果是假,则该组件或文件是不适用在给定的上下文中。

每个软件组件必须有用于识别组件的以下属性:

•组件类(Cclass):例子是CMSIS,设备,文件系统

•组件组(CGROUP):例子是CMSIS:RTOS,设备:启动,文件系统:CORE

•组件版本(Cversion):该软件组件的版本号。

此外,一个软件组件可以具有附加属性:

•组件子组(Csub):例如    CMSIS:RTOS:MyRTOS,

                          Device:Driver USBD:Full-speed

•组件变形(Cvariant):软件组件的变形。

•组件供应商(Cvendor):该软件组件的供应商。

 

所述Cclass,Cgroup,Csub的,Cvariant和Cversion属性与由包指定识别部件供应商一起使用。组件供应商必须确保组合Cclass,Cgroup,Csub的和Cversion是独一无二的,不被多个组件使用。

下面的Cclass名具有特殊的意义:

•板级支持通常包含用于外围设备板特定的驱动程序。

•CMSIS包含一般CMSIS组件,如CORE,DSP扩展,RTOS(如Keil的RTX)

•设备包含目标设备的启动文件

•CMSIS驱动包含为目标设备准备的符合外设驱动程序的CMSIS驱动程序。这些将列举在各自CGROUP API下面的条目(例如以太网(API))

•文件系统,图形,网络和USB包含中间件,以支持这些组件

  其他Cclass的名称,可以自由分配到软件组件。

 

万一多个相互依赖的元件(属于同一类)形成解决方案的一部分,这些可以被分组在一个所谓的bundle。

使用下面的语法引用软件组件和API:

<Vendor>::<ComponentClass>:<Component Group>:<Sub-Group>

 

例如:

•:: CMSIS:RTOS(API) - CMSIS-RTOS API。

•ARM ::CMSIS:DSP - CMSIS-DSP库。

•::File System:Drive:NOR - 文件系统的NOR闪存驱动器。

 

下面是在开发工具的软件组件的显示示例:

          

 

                    在开发工具的软件组件的显示

软件组件文件

 

每个软件组件包括一定数量的文件。每个文件至少具有以下属性:

•name:文件路径,文件名,文件扩展以路径/ 名.扩展格式。该文件路径是相对于包的根目录下。

•categry:定义文件的目的。如表文件类别列出选择预定义的值。

 

每个文件可以选择具有以下属性:

•attr:定义文件的特殊使用和处理。选择作为表文件属性定义的一个预定值。

•condition:输入的条件标识符(属性ID)。该元素用于如果条件解析为真。

•select:简要说明文件和目的。当attr设置为模板或接口,则需要select属性。当一个组件的多个模板文件具有相同的select字符串,它们将被视为一个单个可选择模板。这样一来,多个模板或接口文件可以捆绑。

•src:路径信息。指定的路径是相对于包描述文件(PDSC)。

•version:文件的具体版本信息。这是特别用于复制到项目工作区文件。前一个文件被复制,版本检查避免了不必要的复制行为。如果文件不具有一个版本,则该组件版本被使用。

 

条件

一个条件描述依赖关系:

•特定设备

•一定处理器

•工具属性

•其它组件的存在

条件用于定义    AND/OR规则,使部件有条件,因此,在某些情况下只提供,例如用于特定设备或处理器。条件也用于表达的软件组件之间的依赖性。

 

每个条件有一个id,是一个在PDSC文件的范围内是唯一的。一个id可以在组件的API,例子中,文件和其它条件的条件属性来引用。在接受,要求,或拒绝元素设置的所有属性必须解析为true才能成为真正的元素。一个条件为真时:

•至少有一个接受的元素是真实的,

•所有必需的元素是真实的,

•没有否认元素是真实的。

 

如果在处理期间条件解析为假,各元件将被忽略。

让我们修改从创建PDSC文件部分的示例中加入了CMSIS-RTOS和特定的Cortex-M级核心库的必要条件:

•当使用 Cortex-M0 and Cortex-M0+processor需要mylib_cm0.lib

•当使用Cortex-M3 processor 需要mylib_cm3.lib

•当使用 Cortex-M4 or Cortex-M7processor需要 mylib_cm4.lib

复制Pack_with_Software_Components.zip文件02_Conditions目录的内容到你的工作环境中。

 

1.加个<conditions>部分如下所示:

 

         <conditions>

         <conditionid="ARM Compiler">

         <requireTcompiler="ARMCC"/>

         </condition>

         <conditionid="CM0">

         <description>Cortex-M0based device</description>

         <requirecondition="ARM Compiler"/>

         <acceptDcore="Cortex-M0"/>

         <acceptDcore="Cortex-M0+"/>

         </condition>

         <conditionid="CM3">

         <description>Cortex-M3based device</description>

         <requirecondition="ARM Compiler"/>

         <acceptDcore="Cortex-M3"/>

         </condition>

         <conditionid="CM4_CM7">

         <description>Cortex-M4based device</description>

         <requirecondition="ARM Compiler"/>

         <acceptDcore="Cortex-M4"/>

         < acceptDcore="Cortex-M7"/>

         </condition>

         <condition id="CMSIS Core with RTOS">

         <description>CMSISCore with RTOS for Cortex-M processor</description>

         <acceptcondition="CM0"/>

         <acceptcondition="CM3"/>

         <acceptcondition="CM4_CM7"/>

         <requireCclass="CMSIS" Cgroup="CORE"/>

         <requireCclass="CMSIS" Cgroup="RTOS"/>

        </condition>

        </conditions>

2.通过添加条件和增加组件的版本号改变已经存在的组件的第一行:

<componentCclass="MyClass"Cgroup="MyGroup"Csub="MySubGroup" Cversion="1.0.1" condition="CMSISCore with RTOS">

3.下面的代码添加到现有的组件:

        <file category="library" condition="CM0" name="MySWComp\Lib\mylib_cm0.lib"/>

        <file category="library" condition="CM3" name="MySWComp\Lib\mylib_cm3.lib"/>

        <file category="library" condition="CM4_CM7" name="MySWComp\Lib\mylib_cm4.lib"/>

需要注意的是库文件应始终对一个特定的C / C++编译器的有相应的条件。要做到这一点,每个处理器都有条件做为ARM C / C++编译器的附加要求。

4.在PDSC文件的头部添加新的版本号,使得一个包用一个新的版本号将被创建:

          <release version="1.0.1">

          Conditions added

          </release>

        5.最后,保存PDSC文件,然后使用gen_pack.bat脚本生成包文件。请参阅生成包的进一步细节。之后,安装包在你的开发工具,并观察这些差异1.0.0版本。

 

显示有条件增加文件的Cortex-M3的设备开发工具

 

注意

PackChk.exe将会显示M362的警告。

*** WARNING M362: (Line 82)

  Not all Component Dependencies for'Cclass=MyClass, Cgroup=MyGroup, Csub=MySubGroup, Cversion=1.0.1, Capiversion='can be resolved.

  RTE Model reports: No component is installed.

 

这是因为它无法解析,并检查依赖性成分不属于此包的一部分(在这种情况下,CMSIS组件)。您可以放心地忽略此警告或ARM补充:CMSIS PDSC的检查过程,从而使依赖可以正确检测。

 

 

变体

软件组件可以具有变体,例如:

•调试版本或发布版本没有诊断输出

•长/短文件名

•快速/慢速模式

变体是相互排斥的(仅一种变体可以一次被选择)。变体是组件ID的可选部分。该变种说明是一个简短的字符串(如发布,调试)。

 

注意

版本管理依赖于变体,以保持版本之间不变。

下面的示例介绍了两个变体一个新的组件的包:调试和发布。复制Pack_with_Software_Components.zip文件03_Variants目录的内容到您的工作环境文件目录的。

1.添加以下行的组件部分的PDSC文件:

<component Cclass="MyVariant" Cgroup="MyGroup" Cvariant="Release" Cversion="1.0.2" condition="CMSISCore with RTOS">

<description>Releaseversion of MyVariant</description>

<RTE_Components_h>

<!-- the following contentgoes into file 'RTE_Components.h' -->

#define RTE_MyVariant_Release/* MyVariant Release Version */

</RTE_Components_h>

<files>

<file category="doc"name="Docs\MySWComp.htm"/>

<file category="header"name="MySWComp\header_mylib.h"/>

<file category="header"name="MySWComp\config_mylib.h" attr="config" version="1.0.0"/>

<file category="source"name="MySWComp\mylib_one.c"/>

<file category="source"name="MySWComp\mylib_two.c"/>

<file category="library" condition="CM0" name="MySWComp\Lib\mylib_cm0.lib"/>

<file category="library" condition="CM3" name="MySWComp\Lib\mylib_cm3.lib"/>

<file category="library" condition="CM4_CM7" name="MySWComp\Lib\mylib_cm4.lib"/>

</files>

</component>

<component Cclass="MyVariant" Cgroup="MyGroup" Cvariant="Debug" Cversion="1.0.2" condition="CMSISCore with RTOS">

<description>Debugversion of MyVariant</description>

<RTE_Components_h>

<!-- the following contentgoes into file 'RTE_Components.h' -->

#define RTE_MyVariant_Debug /* MyVariant Debug Version */

</RTE_Components_h>

<files>

<file category="doc"name="Docs\MySWComp.htm"/>

<file category="header"name="MySWComp\header_mylib.h"/>

<file category="header"name="MySWComp\debug_config_mylib.h" attr="config" version="1.0.0"/>

<file category="source"name="MySWComp\debug_mylib_one.c"/>

<file category="source"name="MySWComp\debug_mylib_two.c"/>

<file category="library" condition="CM0" name="MySWComp\Lib\debug_mylib_cm0.lib"/>

<file category="library" condition="CM3" name="MySWComp\Lib\debug_mylib_cm3.lib"/>

<file category="library" condition="CM4_CM7" name="MySWComp\Lib\debug_mylib_cm4.lib"/>

</files>

</component>

2.添加一个新的修订,以反映变化中的一个新生成的包:

      <release version="1.0.2">

      Variants introduced

      </release>

3.最后,保存PDSC文件,然后使用gen_pack.bat脚本生成包文件。请参阅生成包的进一步细节。之后,安装包在你的开发工具,并观察这些差异1.0.1版本。

                      MyVariant在开发工具中的显示

 

RTE_Components.h

有时,软件组件需要知道其它组件。根据另一组件的可用性或配置,某些设置可能是必需的。一个明显的头文件可以使组件知道对方:RTE Components.h。将一条C代码添加到这个头文件,只需下面一样就可以添加到您的组件:

<RTE_Components_h>

  #define RTE_MyVariant_Debug               /* MyVariant Debug Version */

</RTE_Components_h>

 

#define可以由一个项目的其他部件中进行检查。

注意

  RTE components.h文件需要包括在你的源文件的某处。

 

 

一个束基本上是在Cclass级别的变体。它规定了相互依赖的组件的集合属性类,版本和可选组和供应商。一个包内的组件继承了包的属性设置,不能再次设置这些属性。束确保跨越多个互通组件属性的一致性,从不同的解决方案Cclass内限制组件的混搭。除组件外,一个束有强制性内容描述和DOC(用于文档)。

束的一个例子出现在创建BSP束,其中所述束是为一定的开发平台用来提供电路板支持的文件。

 

实例

一些软件组件允许多个实例。如果一个以上的外设可以被连接的话,这是有用的。

1.添加实例的最大数目的信息是容易的。改变的第一个组件(:: MyClass的:mygroup的:MySub)如下:

<componentCclass="MyClass"Cgroup="MyGroup"Csub="MySubGroup" Cversion="1.0.3" condition="CMSISCore with RTOS" maxInstances="3">

2.添加一个新版本号

        <release version="1.0.3">

         Maximum number of instances specified

         </release>

3.最后,保存PDSC文件,然后使用gen_pack.bat脚本生成包文件。请参阅生成包的进一步细节。之后,安装包在你的开发工具,并观察这些差异1.0.2版本。当选择一定数量的组件的实例的,使得开发工具来复制所需要的配置文件多次到项目。这确保了每个组件实例可以单独配置。

 

 

 

API接口

API是一个软件组件,它只是定义了一个C / C++应用程序编程接口(API)的一种特殊形式。一个API不包含实际执行(通常由源代码或库文件提供),并且不能在一个开发工具选择。一个例子是CMSIS-RTOS API,它被指定为CMSIS的一部分。但是,实际的实时操作系统的实现是由不同的厂商提供的。一个API包含名称,简要说明以及一个或多个的头文件,以及含有该API的详细规范文档。

 

复制Pack_with_Software_Components.zip文件目录内的05_APIs目录的文件到您的工作环境中:

1.按照下面添加一个<apis>

         <api Cclass="Device"Cgroup="MyAPI" exclusive="0">

         <description>API forMyAPI</description>

         <files>

         <file category="doc"name="Docs\API\MyAPI.htm"/>

         <file category="header"name="API\Include\MyAPI.h"/>

         </files>

         </api>

2.添加一个新的版本号

        <release version="1.0.4">

        MyAPI added

        </release>

3.最后,保存PDSC文件,然后使用gen_pack.bat脚本生成包文件。请参阅生成包的进一步细节。之后,安装包在你的开发工具,并观察这些差异1.0.3版本。最有可能的,你会看到没有因为API是不可选择的,因而没有在工具显示。

 

用户代码模板

用户代码模板提供了一个快速启动实施的应用程序。要添加用户的代码模板,添加源文件的属性在<组件>ATTR=“模板”。选择属性是用来识别模板文件。具有相同属性的选择模板文件将同时添加到项目中。

 

复制Pack_with_Software_Components.zip文件的06_User_Code_Templates目录的内容到工作环境中:

1.将以下代码添加到变体(debug 和 release)::MyVariant:MyGroupcomponent:

<file category="source"name="MySWComp\Templates\mylib_template1.c" attr="template" select="EasyTemplate"/>

<file category="source"name="MySWComp\Templates\mylib_template2.c" attr="template" select="ComplexTemplate"/>

<file category="source"name="MySWComp\Templates\mylib_template3.c" attr="template" select="ComplexTemplate"/>

2.添加一个新的版本号:

<release version="1.0.5">

User Code Templates added

</release>

3.最后,保存PDSC文件,然后使用gen_pack.bat脚本生成包文件。请参阅生成包的进一步细节。之后,安装包在你的开发工具,并观察这些差异1.0.4版本。

                                          用户代码模板在开发工具中的显示

示例工程

示例工程有助于更好了解一定的MCU或开发板。一个例子,它的每个单独的文件条件必须解析真实的条件;如果是假的,示例或文件将被忽略。板级元素被用来使用的电路板厂商引用到一个或多个板的描述和命名的例子是针对。每个例子可以指定使用Cclass,CGROUP,Csub的和Cversion相关组件的属性。在<项目>元素包含要加载的支持的开发工具和项目文件的名称。

 

复制Pack_with_Software_Components.zip文件在您的工作环境中的文件目录的07_Example_Projects目录的内容:

1.如下所示添加一个<examples>部分

<examples>

<example name="MyDevBoard Example" doc="Abstract.txt" folder="MyPackExample">

<description>CMSIS-RTOSbased example</description>

<board name="MyDevBoard" vendor="MyVendor"/>

<project>

<environment name="uv"load="MyPackExample.uvprojx"/>

</project>

<attributes>

<component Cclass="CMSIS"Cgroup="CORE"/>

<component Cclass="Device"Cgroup="Startup"/>

<component Cclass="CMSIS"Cgroup="RTOS"/>

<component Cclass="MyVariant" Cgroup="MyGroup"/>

</attributes>

</example>

<examples>

2.添加一个新的版本号

<release version="1.0.6">

Example project added

</release>

3.最后,保存PDSC文件,然后使用gen_pack.bat脚本生成包文件。请参阅生成包的进一步细节。之后,安装包在你的开发工具,并观察这些差异1.0.5版本。

                       示例工程在开发工具中的显示

示例工程依赖于一个存在的开发板(代码需要在真实的硬件上运行)。在上面的代码中,你会发现,被指定的开发板称为“MyDevBoard”。板级支持包说明如何板卡集成到一个包。

 

 

 

 

 器件支持包

一个包含<devices>元素的软件包称作设备家族包(DFP)。一个DFP可以包含额外的软元件或者工程示例或者其任意组合。典型的DFP内容有:

 解释设备或者设备系列功能的设备属性。

 配置设备的软元件和基本设备驱动程序,典型的有:

 需要用来设置C运行时库,器件时钟和存储器接口的CMSIS兼容的系统和启动文件。

 提供给中间件栈使用的物理器件外设的软件例行程序对应的外设驱动程序接口

 程序员视角的用来描述器件外设的一个或多个系统视图描述文件。驱动程序可遵守CMSIS-Driver标准。

 擦除和下载代码到片上闪存用的Flash编程算法。

 显示器件及其外设的用法的工程示例。

 可以用来作为应用开发起点的用户代码模板。

 

该节是一个说明如何创建DFP的教程。起初,在DFP中只有描述器件的PDSC(Package description——包描述)文件。然后向该DFP中扩充添加SVD(System View Description——系统视图描述)文件、Flash算法和器件相关的如系统和HAL(Hardware Abstraction Layer——硬件抽象层)的软元件文件。示例项目和代码模板可作为描述节添加到软元件包中。

DFP使用案例

为支持新的器件,器件系列包(DFP)可以作为开发工具的扩展由芯片供应商提供。相对于某一器件系列,DFP使芯片供应商能独立的分发器件支持工具。

DFP也能被用来提供显示相关网站的信息。一个例子是www.keil.com/dd2/上的新设备数据库:               从DFP中提取网站上的设备信息

 

创建一个DFP的步骤

基本器件系列包

在下面的章节中,将为设备供应商Myvendor提供的称为MVCM3的一个虚构的器件系列创建DFP。器件系列由被分成两个子系列的四个成员组成。所述MVCM3系列的规格如下:

准备工作

1. 在您的PC上创建一个工作目录,例如C:\temp\working_dfp

2. 进入可用的ARM::CMSIS包安装目录的\CMSIS\Pack\Tutorials。请查阅您的开发工具的文档来获取包安装目录结构的详细信息。在μVision中,它在目录C:\Keil\ARM\Pack\ARM\CMSIS\version下。

3. 打开文件Pack_with_Device_Support.zip

4. 将该ZIP文件中的01_Basic_Pack目录复制到您的工作目录。

5. 确保文件或目录没有被写保护(删除只读标志)。

6. 从可用的ARM::CMSIS包安装目录的\CMSIS\Utilities下复制如下文件到您的工作目录中:

o PackChk.exe

o PACK.xsd

o SVDConv.exe

7. 用一个编辑器打开文件MyVendor.MVCM3.pdsc

 

代码示例

1. 取消PDSC文件中对<devices>部分的注释,并添加以下内容:

 

<familyDfamily="MVCM3 Series" Dvendor="Generic:5">

<processorDcore="Cortex-M3" DcoreVersion="r2p1" Dfpu="0"Dmpu="0" Dendian="Little-endian"/>

<description>

The MVCM3 device familycontains an ARM Cortex-M3 processor, running up to 100 MHz with a versatile setof on-chip peripherals.

</description>

<!--************************ Subfamily 'MVCM3100' **************************** -->

<subFamilyDsubFamily="MVCM3100">

<processorDclock="50000000"/>

<!--************************* Device 'MVCM3110' *****************************-->

<deviceDname="MVCM3110">

<memoryid="IROM1" start="0x00000000" size="0x4000"startup="1" default="1"/>

<memoryid="IRAM1" start="0x20000000" size="0x0800"default="1"/>

</device>

<!--************************* Device 'MVCM3120' *****************************-->

<deviceDname="MVCM3120">

<memoryid="IROM1" start="0x00000000" size="0x8000"startup="1" default="1"/>

<memoryid="IRAM1" start="0x20000000" size="0x1000"default="1"/>

</device>

</subFamily>

<!--************************ Subfamily 'MVCM3200' ****************************-->

<subFamilyDsubFamily="MVCM3200">

<processorDclock="100000000"/>

<!--************************* Device 'MVCM3250' *****************************-->

<deviceDname="MVCM3250">

<memoryid="IROM1" start="0x00000000" size="0x4000"startup="1" default="1"/>

<memoryid="IRAM1" start="0x20000000" size="0x0800"default="1"/>

</device>

<!--************************* Device 'MVCM3260' *****************************-->

<device Dname="MVCM3260">

<memoryid="IROM1" start="0x00000000" size="0x8000"startup="1" default="1"/>

<memoryid="IRAM1" start="0x20000000" size="0x1000"default="1"/>

</device>

</subFamily>

</family>

注意

Dvendor ID不能自由选择。此处设置的ID可以在PACK.xsd中找到(可用的ARM::CMSIS包安装目录的CMSIS\Utilities中)。

本节以及下面各节的所有的代码示例可以在01_Basic_Pack 目录下的snippets.xml文件中找到。

2. 保存PDSC文件并用gen_pack.bat脚本生成包文件。参见Generate a Pack以了解进一步的细节。然后安装这个包到您的开发工具中。

 

                    在开发工具中显示微控制器器件

系统和启动文件

CMSIS-CORE定义了如下要在嵌入式应用中使用的文件:

 startup_<device>.s包含复位处理程序和异常向量。其在复位之后执行,然后调用SystemInit,且可能包含用户应用程序的堆栈配置。

 system_<device>.c和system_<device>.h包含通用的系统配置信息(如时钟和总线设置)。

 <device.h> 提供了可访问的处理器核心和所有外设。该文件应该由SVD文件通过SVDConv.exe产生,以此来确保头文件和调试器显示的一致性。

 

                          与用户代码有关的系统和启动文件

注意

CMSIS-CORE阐明了系统和启动文件的结构以及其创建方式。

复制Pack_with_Device_Support.zip中的02_System_and_Startup目录到您的工作环境中的文件目录中。

1. 取消PDSC文件中对<conditions>部分的注释,并添加以下内容(该conditions部分提供了该步骤的详细信息):

<conditionid="MVCM3 CMSIS-CORE">

<!-- conditionsselecting Devices -->

<description>MyVendorMVCM3 Series devices and CMSIS-CORE</description>

<requireCclass="CMSIS" Cgroup="CORE"/>

<requireDvendor="Generic:5" Dname="MVCM3*"/>

</condition>

<conditionid="Startup ARM">

<description>Startupassembler file for ARMCC</description>

<requireTcompiler="ARMCC"/>

</condition>

<conditionid="Startup GCC">

<description>Startupassembler file for GCC</description>

<require Tcompiler="GCC"/>

</condition>

<conditionid="Startup IAR">

<description>Startupassembler file for IAR</description>

<requireTcompiler="IAR"/>

</condition>

注意

基于汇编的startup_<device>.s文件是和工具有关的。因此,对于各工具供应商,单独的条件是必需的。

2. 取消PDSC文件中对<components>部分的注释,并添加以下内容(该components部分提供了该步骤的详细信息):

 

<component Cclass="Device" Cgroup="Startup"Cversion="1.0.0" condition="MVCM3 CMSIS-CORE">

<description>SystemStartup for MyVendor MVCM3 Series</description>

<files>

<!-- include folder-->

<filecategory="include" name="Device\Include\"/>

<filecategory="source"name="Device\Source\ARM\startup_MVCM3xxx.s" attr="config"condition="Startup ARM"/>

<filecategory="source"name="Device\Source\GCC\startup_MVCM3xxx.s" attr="config"condition="Startup GCC"/>

<filecategory="source"name="Device\Source\IAR\startup_MVCM3xxx.s" attr="config"condition="Startup IAR"/>

<filecategory="source" name="Device\Source\system_MVCM3xxx.c"attr="config" />

</files>

</component>

3. 添加一个新的版本号:

 

<releaseversion="1.0.1">

Startup files included

</release>

 

4. 最后,保存PDSC文件并用gen_pack.bat脚本生成包文件。然后安装这个包到您的开发工具中并创建一个新的工程。选择软元件::CMSIS:CORE::Device:Startup给该工程:

启动和系统文件添加到了工程中

 

系统视图描述文件

CMSIS-SVD用来书面地描述包含基于ARM Cortex-M处理器的微控制器系统,尤其是外设寄存器的内存映射的程序员视图。系统视图中包含描述的详细程度足以与由芯片厂商公布的器件参考手册中的描述媲美。信息范围从上层的外设功能描述一直到底层内存映射寄存器中单个位域的定义和功能。由芯片供应商对CMSIS-SVD文件进行制定和维护。将基于XML的SVD文件的输入到SVDConv.exe来生成依赖于调试视图和器件头文件的工具。

复制Pack_with_Device_Support.zip中的03_SVD_File目录到您的工作环境中的文件目录中。

1. 用一个编辑器打开Files\SVD目录中的MVCM3xxx.svd文件并按如下进行更改:

 

<deviceschemaVersion="1.1" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"xs:noNamespaceSchemaLocation="CMSIS-SVD.xsd" >

<vendor>MyVendor</vendor><!-- device vendor name -->

<vendorID>Generic</vendorID><!-- device vendor short name -->

<name>MVCM3xxx</name><!-- name of part-->

<series>MVCM3xxx</series><!-- device series the device belongs to -->

<version>1.2</version><!-- version of this description, adding CMSIS-SVD 1.1 tags -->

<description>ARM32-bit Cortex-M3 Microcontroller based device, CPU clock up to 100MHz.</description>

2. 在您的工作目录中打开一个命令行窗口并输入:

 

C:\temp\working_dfp>SVDConv.exeFiles\SVD\MVCM3xxx.svd --generate=header –-fields=macro

3. 您应该能看到类似于这样的一些SVDConv输出:

 

CMSIS-SVD SVD ConsistencyChecker / Header File Generator V2.82g

Copyright (C) 2010 - 2014ARM Ltd and ARM Germany GmbH. All rights reserved.

Options:"Files\SVD\MVCM3xxx.svd" --generate=header --fields=macro

Reading file:"Files\SVD\MVCM3xxx.svd"

Decoding using XML SVDSchema V1.1

Found 0 Errors and 0Warnings

Return Code: 0 (OK)

将生成的头文件MVCM3xxx.h移动到Device\Include目录中。

4.向其PDSC文件的系列级区域添加如下两行代码:

<compileheader="Device\Include\MVCM3xxx.h"/>

<debugsvd="SVD\MVCM3xxx.svd"/>

5. 添加一个新的版本号:

<releaseversion="1.0.2">

SVD and header fileincluded

</release>

6. 最后,保存PDSC文件并用gen_pack.bat脚本生成包文件。然后安装这个包到您的开发工具中并创建

                             工程中的SVD文件

注意

更多关于CMSIS-SVD的信息,请访问www.keil.com/cmsis/svd

Flash编程算法

Flash编程算法用于擦除或下载应用程序到Flash器件。个DFP通常包含预定义的Flash算法来对它支持的器件编程。算法功能页面详尽地阐述了该机制。

对于MVCM3系列的器件,需要创建两种flash算法。MVCM3110/250拥有16kB的Flash,而MVCM3120/260拥有32kB的Flash存储。

复制Pack_with_Device_Support.zip中的04_Flash_Programming目录到您的工作环境中的文件目录中。

1. 重命名工程文件NewDevice.uvproj(在目录_Template_Flash中)来表示新的Flash ROM器件名称,例如MVCM3XXX_16.uvproj。

2. 用uVision打开该工程。选好目标(Cortex-M)器件。

注意

MDK-Lite不支持创建Flash编程算法。

3. 打开会话框Project - Options for Target -Output并且更改Name of Executable域的内容来表示当前器件,这里用MCVM3XXX_16。

                         'Cortex-M'目标选项

 

4. 事实上,现在您就可以开始调整文件FlashPrg.c中的编程算法。现在只更改文件FlashPrg.c中的器件参数(器件名称,器件大小以及扇区大小):

struct FlashDevice constFlashDevice = {

FLASH_DRV_VERS, // DriverVersion, do not modify!

"MVCM3110/250Flash", // Device Name

ONCHIP, // Device Type

0x00000000, // Device StartAddress

0x00004000, // Device Sizein Bytes (16kB)

1024, // Programming PageSize

0, // Reserved, must be 0

0xFF, // Initial Content ofErased Memory

100, // Program PageTimeout 100 mSec

3000, // Erase SectorTimeout 3000 mSec

// Specify Size and Addressof Sectors

0x002000, 0x000000, //Sector Size 8kB (2 Sectors)

SECTOR_END

};

5. 用Project - Build Target来生成新的Flash编程算法。算法会在当前目录下的_Template_Flash目录中被创建。

6. 复制输出文件..\MVCM3XXX_16.FLM到一个新的称为Files\Flash的子目录下。添加这行代码到MVCM3110/250的device部分:

algorithmname="Flash\MVCM3XXX_16.FLM" start="0x00000000"size="0x4000" default="1"/>

7. 为MVCM3120/260器件创建一个MVCM3XXX_32.flm文件。

8. 添加这行代码到MVCM3120/260的device部分:

 

algorithmname="Flash\MVCM3XXX_32.FLM" start="0x00000000"size="0x8000" default="1"/>

9. 添加一个新的版本号:

 

<releaseversion="1.0.3">

Flash ProgrammingAlgorithms added

</release>

10. 最后,保存PDSC文件并用gen_pack.bat脚本生成包文件。然后安装这个包到您的开发工具中。根据您的开发环境,在您的工程中将会看到Flash编程算法:

 

                                    Flash编程算法的显示

器件属性

为了减少冗余,可将器件分为两个级别的分组:

 系列:一个器件系列拥有相同的处理器的属性。

 子系列:一个可选的子系列属性;这里增加或修改一个系列的特征。

 

某具体器件属性规定了:

 器件:具体半导体器件的属性

 变种:器件变体的属性(例如,拥有不同的封装或温度范围)或者OEM器件或者集成器件的电路板。

 

一个器件由如下属性来进行描述:

 描述:文本形式的器件描述

 特征:器件的外设和特征分类表。该列表用于在网站上显示器件的特征。

 手册:关于器件以及其处理器的文档

 处理器:嵌入到器件中的处理器和处理器的特征

 编译:器件支持的构建工具的常规设置

 调试配置:调试链接的默认配置

 调试端口:调试器进行调试连接配置时器件的调试端口的描述。

 调试:调试器进行调试连接配置时器件的特定信息,包括系统视图描述文件。

 跟踪:调试器在配置跟踪时器件的特定信息。

 存储器:器件内部和外部RAM和ROM的存储器区域布局

 算法:器件特定的Flash编程算法

 

一个器件将会同时继承来自系列级和子系列级的技术参数。一些属性必需是唯一的。例如<debug>属性中SVD文件名属性值。因此,在SVD文件中由系列级指定的属性值可以被子系列级或者器件级的属性值重新定义。在系列级以及子系列级中的比如描述以及特征项等信息会被级联在一起,然后最终确定这些器件级的信息。

接下来将介绍如何指定器件MVCM3110的器件属性(请参阅基本器件系列包中所示的技术参数)。该系列的其它成员的器件属性也相应地被指定。

复制Pack_with_Device_Support.zip中的05_Device_Properties目录到您的工作环境中的文件目录中:

1. MVCM3 Series系列的处理器编译描述和调试属性已经被指定了。这里对系列级的其它公共的手册和特征属性进行指定。添加下面的代码行到其PDSC文件的<family>部分中:

 

<bookname="Docs\dui0552a_cortex_m3_dgug.pdf" title="Cortex-M3 GenericUser Guide"/>

<book name="Docs\MVCM3XXX_Datasheet.pdf"title="MVCM3 Series Datasheet"/>

<bookname="Docs\MVCM3XXX_Product_Brief.pdf" title="MVCM3 ProductBrief"/>

<featuretype="ExtInt" n="16"/>

<featuretype="Temp" n="-40" m="105" name="ExtendedTemperature Range"/>

<featuretype="VCC" n="2.5" m="3.6"/>

<featuretype="RTC" n="32768"/>

<featuretype="WDT" n="1"/>

2. MVCM31xx子系列有些特征是其两个成员器件共有的。请将下面的代码添加到MVCM3100的<subFamily>部分:

 

<featuretype="IOs" n="26"/>

<featuretype="I2C" n="1"/>

<featuretype="UART" n="4"/>

<featuretype="Timer" n="6" m="32"/>

<featuretype="QFP" n="32"/>

 

3. MVCM3110器件具有一些独有的器件特征。请将下面的代码添加到MVCM3110的< device >部分:

<featuretype="PWM" n="2" m="16"/>

器件特有的软元件

最后,需要将软元件和工程示例添加到DFP中。

1. 将下面的代码行添加到其PDSC文件的<components>部分:

<componentCclass="Device" Cgroup="HAL" Csub="GPIO"Cversion="1.0.0" condition="MVCM3 CMSIS-CORE">

<description>GPIO HALfor MyVendor MVCM3 Series</description>

<files>

<filecategory="header" name="Device\Include\GPIO.h"/>

<filecategory="source" name="Device\Source\GPIO.c"/>

</files>

</component>

<componentCclass="Device" Cgroup="HAL" Csub="ADC"Cversion="1.0.0" condition="MVCM3 CMSIS-CORE">

<description>ADC HALfor MyVendor MVCM3 Series</description>

<files>

<filecategory="header" name="Device\Include\ADC.h"/>

<file category="source"name="Device\Source\ADC.c"/>

</files>

</component>

<componentCclass="CMSIS Driver" Cgroup="I2C"Cversion="1.0.0" condition="MVCM3 CMSIS-CORE"maxInstances="3">

<description>I2CDriver for MVCM3 Series</description>

<RTE_Components_h>

#define RTE_Drivers_I2C0 /*Driver I2C0 */

#define RTE_Drivers_I2C1

#define RTE_Drivers_I2C2

</RTE_Components_h>

<files>

<filecategory="source" name="Drivers\I2C\I2C_MVCM3.c"/>

<filecategory="header" name="Drivers\I2C\I2C_MVCM3.h"/>

</files>

</component>

<componentCclass="CMSIS Driver" Cgroup="UART"Cversion="1.0.0" condition="MVCM3 CMSIS-CORE"maxInstances="5">

<description>UARTDriver for MVCM3 Series</description>

<RTE_Components_h>

#define RTE_Drivers_UART0

#define RTE_Drivers_UART1

#define RTE_Drivers_UART2

#define RTE_Drivers_UART3

#define RTE_Drivers_UART4

</RTE_Components_h>

<files>

<filecategory="source" name="Drivers\UART\UART_MVCM3.c"/>

<filecategory="header" name="Drivers\UART\UART_MVCM3.h"/>

</files>

</component>

注意

前两个软元件被添加到Device::HAL是因为它们是器件系列特有的且未使用发布的API。I2C和UART的驱动秉承了CMSIS-Driver规范。因此,把它们添加到了CMSIS Driver器件类中。

2. 同样创建一个工程示例。将<examples>部分注释取消并添加这些:

 

<examplename="Dummy" doc="Abstract.txt"folder="Examples\dummy">

<description>Dummyproject</description>

<board name="MVCM3Starter Kit" vendor="MyVendor"/>

<project>

<environmentname="uv" load="dummy.uvprojx"/>

</project>

<attributes>

<category>GettingStarted</category>

</attributes>

</example>

3. 添加一个新的版本号:

 

<releaseversion="1.0.4">

DFP finalized

</release>

4. 最后,保存PDSC文件并用gen_pack.bat脚本生成包文件。然后安装这个包到您的开发工具中。

 

 

板级支持包

包含<board>元素软件包被称为板级支持包(BSP)。一个BSP可能包含其他软件组件,示例项目,以及代码模板。一个BSP的典型内容是:

•源代码,库,为底层硬件和文档准备的头文件/配置文件(例如用户手册,入门指南和原理图)。

•示例项目,展示了开发板及其外围设备的使用情况。

•用户代码模板可以用来作为起点用于使用开发板或安装。

 

这部分是一个教程,介绍了如何创建一个BSP。最初在BSP的PDSC文件只是描述一个评估板。这是BSP然后扩展到还含有软件组件与电路板的硬件接口。示例项目和代码模板可以像软件组件包描述的那样添加进来。

BSP使用案例

 

一个BSP通常由电路板厂商提供,用于扩展开发工具。在一般情况下,BSP能够使电路板供应商来分发他们的开发平台工具,BSP还可以在用于提供信息有关的网站上显示。其中一个例子是www.keil.com/boards2/:

 

 

指定一个开发板

准备工作

1.安装软件包的Keil::ARMCortex_DFP,因为需要这,BSP才能正常工作。

2.创建一个工作目录您的电脑上,例如C:\ TEMP\ working_bsp。

3。在ARM::CMSIS包目录\ CMSIS\Pack\Tutorials注册。请咨询您的开发工具的文档上的包安装目录结构的详细信息。在一个标准的μVision安装,你会发现它在下面的C:\Keil_v5\ ARM\包\ ARM\ CMSIS\version

4.打开文件Pack_with_Board_Support.zip。

5.复制ZIP文件的01_Specify_Dev_Board目录中的内容到你的工作目录。

6.确保文件/目录没有写保护(删除只读标志)。

7.从ARM::CMSIS 包注册文件里目录 \CMSIS\Utilities的内容复制到您的工作目录:

◦PackChk.exe

◦PACK.xsd

8.在编辑器中打开MyVendor.MyBSP.pdsc文件。

 

代码示例

1.按照下面添加一个<boards>部分到PSDC文件:

 

<boards>

<board vendor="MyVendor" name="MyDevBoard" revision="V1" salesContact="sales@keil.com" orderForm="http://www.keil.com">

<description>MyVendorMyDevBoard Board Description</description>

<image small="Images\MyDevBoard_small.png" large="Images\MyDevBoard_large.png"/>

<book category="setup"name="Docs\MyDevBoard\MyDevBoard_setup.pdf" title="GettingStarted"/>

<book category="schematic" name="Docs\MyDevBoard\MyDevBoard_schematics.pdf" title="Schematics"/>

<book category="manual"name="Docs\MyDevBoard\MyDevBoard_um.pdf" title="UserManual"/>

<mountedDevicedeviceIndex="0" Dvendor="ARM:82" Dname="ARMCM3"/>

<compatibleDevicedeviceIndex="0" Dvendor="ARM:82" Dfamily="ARMCortex M3"/>

<feature type="ODbg" n="1" name="On-board J-LINK Lite"/>

<feature type="PWR" n="5" name="USB Powered"/>

<feature type="DIO" n="8"/>

<feature type="SPI" n="1"/>

<feature type="LED" n="6" name="User LEDs"/>

<feature type="ArduinoFF" n="1"/>

<debugInterface adapter="J-Link Lite" connector="Mini-USB"/>

</board>

</boards>

注意

在此所有代码的实施例和下面的各节可以在01_Specify_Dev_Board目录snippets.xml文件中找到。

 

2.最后,保存PDSC文件,然后使用gen_pack.bat脚本生成包文件。请参阅生成包的进一步细节。之后,安装包在你的开发工具。

             开发板在开发工具中的显示

注意

PackCheck.exe将显示M346的信息:

 

*** WARNING M346:.\Files\MyVendor.MyBSP.pdsc (Line 29)
 

 Referenced device(s) in 'MyDevBoard' notfound: 'ARMCM3'

 

*** WARNING M346:.\Files\MyVendor.MyBSP.pdsc (Line 29)
 

 Referenced device(s) in 'MyDevBoard' notfound: 'ARM Cortex M3'

这是因为BSP不包含具有所提到的设备的设备部分。要解决此问题,您可以添加ARM:CMSIS PDSC文件检查过程。

 

创建一个BSP束

一个束基本上是在Cclass级别的变体。它规定了相互依赖的组件的集合属性类,版本和可选组和供应商。一个包内的组件继承了包的属性设置,不能再次设置这些属性。束确保跨越多个互通组件属性的一致性,从不同的解决方案Cclass内限制组件的混搭。除组件外,束有强制性内容description和doc(用于文档)。

 

复制Pack_with_Board_Support.zip文件里的02_BSP_Bundle目录的内容到您的工作环境中的文件目录:

 

 

1.如下添加<conditions>部分在PDSC(condition部分提供了有关此步骤的详细信息):

        <condition id="ARM Cortex M3 Series">

        <description>ARM Cortex M3 devicerequired</description>

        <require Dfamily="ARM Cortex M3" Dvendor="ARM:82"/>

        </condition>

        <condition id="MyDevBoard Board Setup">

        <description>Board Setup Coderequired</description>

        <require condition="ARM Cortex M3 Series"/>

        <require Cclass="Board Support" Cgroup="BoardSetup"/>

        </condition>

2.添加<component>部分在PDSC与以下(component部分提供了有关此步骤的详细信息):

 

<bundle Cbundle="MyDevBoardSupport" Cclass="BoardSupport" Cversion="1.0.1">

<description>MyDevBoardcustom board support package</description>

<doc>Docs\BSP\MyBSP.htm</doc>

<component Cgroup="Board Setup" condition="ARMCortex M3 Series">

<description>Customboard setup code</description>

<files>

<file category="doc"name="Docs\BSP\Setup.htm"/>

<file category="header"name="MySWComp\Include\setup.h"/>

<file category="source"name="MySWComp\Source\setup.c"/>

</files>

</component>

<component Cgroup="I/O"Csub="LED" condition="MyDevBoardBoard Setup">

<description>LED code for customboard</description>

<files>

<file category="doc"name="Docs\BSP\LED.htm"/>

<file category="header"name="MySWComp\Include\led.h"/>

<file category="header"name="MySWComp\Include\config_led.h" attr="config" version="1.0.0"/>

<file category="source"name="MySWComp\Source\led.c"/>

</files>

</component>

<component Cgroup="I/O"Csub="GPIO" condition="MyDevBoardBoard Setup">

<description>GPIO code for customboard</description>

<files>

<file category="doc"name="Docs\BSP\GPIO.htm"/>

<file category="header"name="MySWComp\Include\gpio.h"/>

<file category="header"name="MySWComp\Include\config_gpio.h" attr="config" version="1.0.0"/>

<file category="source"name="MySWComp\Source\gpio.c"/>

</files>

</component>

</bundle>

3.添加一个新的版本号

<release version="1.0.1">

Board support bundle added

</release>

4.最后,保存PDSC文件,然后使用gen_pack.bat脚本生成包文件。之后,安装包在你的开发工具,并观察这些差异1.0.0版本。

                                     在开发工具中显示BSP束

Keil C51使用详解 第一节 系统概述... 6 第二节 Keil C51单片机软件开发系统的整体结构... 6 第三节 Keil C51工具包的安装... 7 1. C51 for Dos 7 2. C51 for Windows的安装及注意事项:... 7 第四节 Keil C51工具包各部分功能及使用简介... 7 1. C51与A51. 7 2. L51和BL51. 8 3. DScope51,Tscope51及Monitor51. 8 4. Ishell及uVision. 9 第二章 Keil C51软件使用详解... 10 第一节 Keil C51编译器的控制指令... 10 1. 源文件控制类... 10 2. 目标文件(Object)控制类:... 10 3. 列表文件(listing)控制类:... 10 第二节 dScope51的使用... 11 1. dScope51 for Dos 11 2. dScope for Windows 12 第三节 Monitor51及其使用... 13 1. Monitor51对硬件的要求... 13 2. Mon51的使用... 13 3. MON51的配置... 13 4. 串口连接图:... 13 5. MON51命令及使用... 14 第四节 集成开发环境(IDE)的使用... 14 1. Ishell for Dos的使用... 14 2. uVision for windows的使用... 15 第三章 Keil C51 vs 标准C.. 15 第一节 Keil C51扩展关键字... 15 第二节 内存区域(Memory Areas):... 16 1. Pragram Area:... 16 2. Internal Data Memory: 16 3. External Data Memory. 16 4. Speciac Function Register Memory. 16 第三节 存储模式... 16 1. Small模式... 16 2. Compact模式... 17 3. large模式... 17 第四节 存储类型声明... 17 第五节 变量或数据类型... 17 第六节 位变量与声明... 17 1. bit型变量... 17 2. 可位寻址区说明20H-2FH.. 18 第七节 Keil C51指针... 18 1. 一般指针... 18 2. 存储器指针... 18 3. 指针转换... 18 第八节 Keil C51函数... 19 1. 中断函数声明:... 19 2. 通用存储工作区... 19 3. 选通用存储工作区由using x声明,见上例。... 19 4. 指定存储模式... 19 5. #pragma disable. 19 6. 递归或可重入函数指定... 19 7. 指定PL/M-51函数... 20 第四章 Keil C51高级编程... 20 第一节 绝对地址访问... 20 1. 绝对宏:... 20 2. _at_关键字... 21 3. 连接定位控制... 21 第二节 Keil C51与汇编的接口... 21 1. 模块内接口... 21 2. 模块间接口... 21 第三节 Keil C51软件包中的通用文件... 22 1. 动态内存分配... 22 2. C51启动文件STARTUP.A51. 22 3. 标准输入输出文件... 25 4. 其它文件... 25 第四节 段名协定与程序优化... 25 1. 段名协定(Segment Naming Conventions) 25 2. 程序优化... 25 第五章 Keil C51库函数参考... 26 第一节 本征库函数(intrinsic routines)和非本征证库函数... 26 第二节 几类重要库函数... 26 1. 专用寄存器include文件... 26 2. 绝对地址include文件absacc.h. 26 3. 动态内存分配函数,位于stdlib.h中... 27 4. 缓冲区处理函数位于“string.h”中... 27 5. 输入输出流函数,位于“stdio.h”中... 27 第三节 Keil C51库函数原型列表... 27 1. CTYPE.H.. 27 2. INTRINS.H.. 27 3. STDIO.H.. 28 4. STDLIB.H.. 28 5. STRING.H.. 28 第六章 Keil C51例子:Hello.c.. 29 第一节 uVision for Windows的使用步骤... 29 第二节 Ishell for Dos使用步骤... 30 第七章 Keil C51的代码效率... 30 第一节 存储模式的影响... 30 第二节 程序结构的影响... 31 第八章 dScope for Windows使用详解... 32 第一节 概述... 32 1. 主窗口(Mainframe Window)... 32 2. 调试窗口(DEBUG Window)... 32 3. 命令窗口(Command Window)... 32 4. 观察窗口(Watch Window)... 32 5. 寄存器窗口(Registe Window)... 32 6. 串口窗口(Serical Windows)... 32 7. 性能分析窗口... 32 8. 内存窗口(Memory Window)... 32 9. 符号浏览窗口(Symbol Browser Window)... 33 10. 调用线窗口(Call-Stack Window)... 33 11. 代码覆盖窗口... 33 12. 外围设备窗口(peripherals) 33 第二节 dScope for Windows基本操作... 33 1. 指定初始化文件... 33 2. 观察变量... 33 3. 显示RAM的值... 34 4. 观察堆栈... 34 5. 中断处理程序调试... 34 6. 性能分析(Performance Analyzer:PA)... 34 第三节 dScope for Windows命令文件的编制... 34 1. 地址空间及地址空间类型... 34 2. 常量... 35 3. 变量... 36 4. 运算符... 38 5. 表达式... 38 6. 数组... 38 7. 结构和联合... 38 8. 指针:... 38 9. dScope命令语句... 38 10. 函数... 43
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值