设置新的硬件目标

可以修改 Rational Rhapsody 提供的文件以与开发环境相匹配,或者创建一组新文件以支持特定目标。

关于此任务

您可以为用于 MicroC 框架 (MXF) 的新目标添加支持,该框架与开发环境相匹配。在此任务中,您将添加适当的文件和定义,它们定义代码生成配置将使用的新环境以生成和构建针对特定硬件的应用程序。此任务也称为重新定位目标,例如,意思是支持新的硬件目标。

使用以下内容定义每个受支持的硬件目标:
  • 一组属性,定义与特定目标相关的文件的各种特征以及为该目标构建应用程序的方式,也称为环境
  • 一组被称为适配器的文件,为与硬件相关的功能(如硬件计时器和通信等)定义特定于目标的实施。

代码生成的配置所使用的该组属性由位于该配置“特征”对话框的设置选项卡上的环境下拉列表决定。

环境下拉列表的内容从 C_CG::Configuration::Environment 属性的枚举定义中获取。

此外,IBM Rational Rhapsody 包括许多特定于目标的文件集。每组文件为 MicroC 执行框架 (MXF) 定义一个适配器。可以在 <Install-Dir>\Share\LangC\mxf\Adaptors\Mainloop 下的相应产品安装子目录中找到这些适配器。

创建用于创建使 MXF 适应该目标的一组相似文件所需的新目标

过程

  1. 1. 通过在 <Install-Dir>\Share\Properties 目录中创建 Site.prp 文件或者更新该文件,添加适合目标的新环境定义:
    1. <Install-Dir>\Share\profiles\MicroC\MicroC.prp 文件复制环境枚举属性,然后向该属性追加新环境的名称。
      在 prp 文件中,在此位置中找到该属性:
      Subject C_CG
          Metaclass Configuration
             Property Environment …
          endend
    2. 复制定义环境的该组属性,如 MicroC.prp 文件中所定义。例如,您可以复制以“metaclass <环境名称>”开头和以“end”结尾的部分,以及这些标记之间定义的所有属性。
      例如,“Metaclass MainLoopSTM32”和以“Property”开头直到行“end”标记为止的所有行,将已复制的环境重命名为新的环境名称。
      Subject C_CG
          	Metaclass <Environment>
      				Property Property1         
      				Property Property2        
      				Property Property3         
      				…      
      			end
      		end
    3. 更改属性环境的定义。例如,C_CG:<NewEnvironment>:AdaptorSearchPath 用于指向新的适配器目录:<Install-Dir>Share\LangC\mxf\Adaptors\MainLoop\<NewTargetFolder>$OMROOT\LangC\mxf\Adaptors\MainLoop\<NewTargetFolder>
      注: NewTaregtFolder 是您选择用于表示文件系统上的目标的名称。
  2. 为目标创建新的目录(如 AdaptorSearchPath 中所定义),然后将文件从现有适配器复制到新目录中。建议选择与您的目标最相似的目标,如 <Install-Dir>\Share\LangC\mxf\Adaptors\MainLoop\Stm32x
  3. 通过实施文件 RiCOSTarget.c 中的功能 RiCOSMainTask_WaitStep 来定义主循环的步骤,通常使用硬件计时器完成。请参阅 $OMROOT\LangC\mxf\Adaptors\MainLoop\Stm32x\RiCOSTarget.c 作为参考。
  4. 在文件 RiCOS.h 中,将 #include statemant 添加到 RiCOSMainloop.h 中。
  5. 对于支持高级操作系统 (OS) 服务的目标(如互斥锁、TCP 等),覆盖文件 RiCOSTargetServices.c\.h 中的相关适配器 API。

    文件 RiCOSMainloop.c 中的每个可覆盖 API 都通过使用 #ifndef… #endif 编译器指令由预处理器宏“<function-name> Defined”围绕。要覆盖 API,请在文件 RiCOSTargetServices.h 中定义此编译器宏并在文件 RiCOSTargetServices.c 中添加新实施。例如,请参阅目标适配器 <Install-Dir>\Share\LangC\mxf\Adaptors\MainLoop\Linux 中 API“RiCOSEventsPoolMutex_init”的覆盖。

  6. 要启用目标监视,在目标上运行时请后退应用程序的图像化,根据该目标上可用的通信(上行链接)修改文件 TargetMonitorProtocol.c\.h。如果不支持目标监视,请除去这些文件。
  7. 建议更改计时器校准以使用一毫秒表示一个时间单位。期望的缺省值为 1 毫秒的 tm(1) 延迟。
    1. 用于 MXF 配置文件模板 C_CG:Configuration:mxfCfgTemplate,#define RICTIMERMANAGER_TIME_CYCLE $<Time ManagerTimeCicle>C_CG::Configuration::TimerManagerTimeCycle 属性。

      此属性的值定义步骤 (3) 中定义的硬件计时器周期。此数值最好尽可能小(整数),以便允许超时具有最大范围和分辨率。

    2. 用于 MXF 配置文件模板 C_CG:Configuration:mxfCfgTemplate,#define RICTIMERMANAGER_DEFAULT_TICK_TIME $<TimeManagerTickTime>C_CG::Configuration::TimerManagerDefaultTickTime 属性。

      根据 HW 计时器定义,此值用于 MXF 的计时器管理程序作为每个 OSTimer 记号的增量值。HW 计时器表示通过两个连续的硬件计时器记号之间的时间单位数。

    3. OSTIMER_INIT() C-Macro 在 RiCOS.h 中定义,使用特定于硬件的计时器初始化定义 H\W 计时器的相关计数器的初始值。
  8. 要运行应用程序,请以不会导致 (7.b) 步骤中定义的持续时间中断的方式实施 RiCOSMainTask_WaitStep 功能,持续时间中断表示 MXF 计时器可以识别的最小时间间隔。

反馈