支持概要

IAR EW 集成提供如下:

  • 项目导入和选项提取工具依赖于工具链 (EWARM, EW430, EWSTM8 等)及其版本。有关更多信息,请参阅下面特定于工具链的部分。

提供以下组件以方便测试 IAR Embedded Workbench 项目 

  • 在 C-SPY 模拟器上启动单元和应用程序测试的测试配置:
    • 运行 IAR EW Tests(批处理模板)- 使用 EW 生成的批处理脚本(.cspy.bat)启动模拟器。
    • 运行带有 Mem 监视的 IAR EW 应用程序(批处理模板)- 使用 EW 生成的批处理脚本(.cspy.bat)启动模拟器。
  • 具有集成测试结果读取的测试流配方(与测试配置相关):
    • 在 IAR C-SPY 模拟器上构建并运行测试。
    • 使用 EW 生成的批处理脚本(.cspy.bat)在 IAR C-SPY 模拟器上构建并运行测试。
    • 在 IAR C-SPY 模拟器上构建并运行应用程序。
    • 使用 EW 生成的批处理脚本(.cspy.bat)在 IAR C-SPY 模拟器上构建并运行应用程序。
  • 以下发布的属性在特定于 IAR 的测试配置/流程中可用:
    • 目标架构(arch) - 用于非(批处理模板)测试配置。
    • "C-SPY 执行后端选项" (bkend_opts) - 需要正确执行目标上的测试二进制文件;在非(批处理模板)测试配置中使用。
    • "原始 IAR EW 项目文件夹名称(prj dir_name) - 项目文件的名称直接父文件夹;默认为原始项目名称;必须设置为定位 EW 生成的批处理脚本;用于(批处理模板)测试配置版本。
    • "原始 IAR EW 项目名称" (prj_name) - 在 Eclipse 项目名称与原始名称不匹配的情况下提供;用于(批处理模板)测试配置版本。
    • "IAR EW 项目构建配置(为 EW < 7.0 留空)" (bld_cfg) - 要使用的 EW 项目构建配置的名称(例如,“调试”或“发布”);必须为较新的 EW 版本设置以在 IAR C-SPY Simulator 中定位用于运行应用程序的 EW 生成的批处理脚本(因为该版本的 EW 生成的批处理脚本的文件名包含 EW 项目构建配置的名称),对于较旧的 EW 版本,应保留为空;在“(批处理模板)”测试配置中使用。
    • “调整 CSpyBat 命令(仅启用 IAR EW < 6.1)" (adj_cspy_cmd) - 指定是否应该使用特殊的其他步骤来调整 EW 生成的批处理脚本。对于最新的 EW 版本,不需要进行此类调整,并且该值应保留为 false(默认);在‘(批处理模板)’测试配置中使用。
    • “驱动程序 DLL" (drv_dll) - CSpyBat 所需的硬件调试器驱动程序 DLL;默认情况下,是 "<arch>sim.dll" (例如,EW430 是 "430sim.dll”,EWRX 是 "rxsim.dll");对于 EWARM 5.3 和 5.4,默认值 ("armsim.dll") 是正确的,但对于更新版本的 EWARM (EWARM 5.4 包含 DLLs) 必须更改为 "armsim2.dll";在非"(批处理模板)”测试配置中。
    • "Flash 加载程序规范文件" (flash_loader) - 要传递给 CSpyBat 的 flash 加载程序规范文件;根据 EWARM 版本,这可能是一个 .xml 或一个 .board/.flash 的文件(内置的配置在 EW_DIR/arm/config/flashloader 中可用);用于所有特定于 IAR 的测试配置流;当使用 flash 加载器和非(批处理模板)测试配置时设置它,当使用(批处理模板)测试配置版本时,仅为 EWARM 5.3 设置它,由于这个 EWARM 的问题(不要为更新的 EWARM 设置它;这将触发重复的 flash 加载程序规范错误)。

在工具链特定的章节中提到了更多测试配置。这些脚本是手动配置的,仅打算在无法使用 EW 生成的 C-SPY 批处理脚本或在其他有问题的情况下作为备份解决方案。请尽可能使用前面提到的“批处理模板”测试配置。

标准的测试配置,如“生成单元测试”、“生成桩函数”等,也可以用于 IAR 项目,建议使用以帮助确保代码质量。

支持环境与 Multiple IAR EW 安装

从 C++test 9.1 开始,对支持多个 IAR EW 安装并存的环境进行了广泛的更改。关于使用哪个 IAR 版本/安装的信息对于使用 C++test 能够正确地构建和测试您的项目是至关重要的。 

IAR 不推荐使用内部项目数据来获取关于 IAR 版本/安装的信息,因此,它必须从 IAR Windows 注册表项和其他主要信息推断,如 EW_DIR 或 PATH 环境变量值。强烈建议将 EW_DIR 变量设置为 EW 安装文件夹路径,并允许其他方法作为 C++test 备份机制运行。  

C++test 在导入项目和扫描 .ewp 项目文件时都使用这些版本控制方法。对于每种方法和环境设置,C++test 将检查注册表中选择的 EW 安装的可用性;如果它没有正确注册,C++test 将不能与它一起工作。 

单个会话期间(应用程序运行),C++test 只能与单一选择的 EW 版本/安装一起工作。要改变这一点,您需要使用修改后的环境重启 C++test。

需求

  • 编译器和 C-SPY 可执行文件必须添加到 PATH 变量中。
  • 运行时库构建配置文件要求 EW_DIR 环境变量可用并设置为 EW 安装位置。
  • "在 IAR C-SPY 模拟器上构建并运行测试"和”在 IAR C-SPY 模拟器上构建并运行应用程序”测试流方法要求 EW_DIR 环境变量可用,并(通过编辑【测试流】属性)设置为手动提供 EW 安装位置和模拟器后端选项。
  • 对于最新 EW 版本,“使用 EW 生成的批处理脚本模板在 IAR C-SPY 模拟器上构建并运行应用程序”和“使用 EW 生成的批处理脚本模板在 IAR C-SPY 模拟器上构建并运行应用程序”测试流方法要求设置 EW 项目构建配置的名称(使用 "IAR EW 项目构建配置” 【测试流】属性)。
  • C++test 运行时库特征的选择项/配置对 IAR 的 C++ 运行时库(DLib)的配置有一定的要求。您必须确保满足这些要求;最重要的是,使用文件渠道(默认)和后置条件/断言消息传递传输测试结果需要 Dlib 提供兼容 stdio 的文件和 printf 接口。因此,您应该使用 "Full" "Semihosted" Dlib 配置或使用 "Custom” 并确保适当的功能可用。

已知局限性 

  • 这里没有 EW 附带的环境配置脚本,因此,您必须依靠 EW 安装程序设置的环境变量,或者通过其他方式设置环境。
  • 不完全支持与 IAR 内存属性相关的 IAR 扩展程序(例如, ’__data’, ’__data20’, ’__tiny’, ’__near_func’)。此限制可能导致分析过程中发生错误,例如解析错误或检测到的代码编译错误。该限制还可能导致代码被分析,好像它包含的内存属性不同于原始代码中的属性。

  • 不支持以下算法的 IAR C++ 扩展程序:
    • 类模板部分专业化匹配
    • 函数模板参数推导
    使用与 C++ 模板结合的 IAR 内存类型属性(例如,’__code’, ’__data’, ’__data20’, ’__near_func’) 可能会导致不正确的【内存类型】属性被替换为模板参数。此限制不会影响 EC++,因为模板在该模式下不可用。因为本节中提到的 IAR 模板相关的 C++ 扩展在 IAR DLIB 标头中广泛使用,C++test 可能不接受使用 IAR STL 标头的代码,或者可能会不精确地分析代码。 
  • C++test 报告的函数签名(例如,在覆盖率视图中)可能缺少与 IAR 类型属性相关的部分。例如, void f(int __data16 *) 和 void f(int __data24 *) 函数的覆盖率可以显示为两个具有相同 void f(int *) 签名的不同函数的覆盖率。
  • 在某些特殊情况下,如果禁用了 IAR 语言扩展程序,C++test 可能不接受分析了的代码。您可以通过启用 IAR 语言扩展程序来绕过此限制。这可以完成,例如,在 EW 内的项目设置中,或通过添加 -e 编译器选项到项目的 C++test 编译器选项。
    1. 选择项目,并选择 Project> 属性> Parasoft> C++test> 构建设置
    2. 在【编译器选项】字段中输入 -e ,然后单击 应用
  • 如果使用 C++test 附带的 IAR 编译器配置,则不管原始项目或构建中使用的是什么 C++ 模式,C++test 都将以 EEC++(扩展嵌入式 C++)模式分析 C++ 代码。此限制不影响 EWSTM8 的 C++test 支持。您可以通过执行以下操作来修改 C++test IAR 编译器配置以绕过此限制:
    1. 创建自定义编译器配置(请查阅 使用交叉编译器配置测试,以了解更多关自定义编译器配置的信息)。
    2. 在 gui.properties 文件中,定位到以 cppCompilerCmdLine= 开始的行,并将 --eec++ 编译器选项修改为所需选项。该行可能具有以下外观:
      cppCompilerCmdLine=$(exe) $(filtered_opts) --eec++
      -I $(CPPTEST_INCLUDE_DIR) $(input) -o $(output)
      如果 gui.properties 文件包含以 cppCompilationModeOption=开始的行,则还必须将 --eec++ 编译器选项更改为所需选项。该行可能具有以下外观:
      сppCompilationModeOption=--eec++
    3. 对 cpp.psrc 文件进行以下更改:

      定位到以 edgtk.preprocessorCommand 和 edgtk.gccAutoconfiguratorCommand 开始的行,并将 --eec++ 编译器选项更改为所需选项。该行可能具有以下外观:
      edgtk.preprocessorCommand {exe} --preprocess=nl {out} {opts} --eec++ {in}
      edgtk.gccAutoconfiguratorCommand {exe} --preprocess=nl {tmpout} {opts} --eec++ --silent --predef_macros {out} {in}

  • 限制了对编译器 pragma 指令的支持。虽然 progma 指令被接受了,并且分析期间通常保留在所测试代码中,但它们不会被编译。在某些特殊情况下,可能分析包含编译器 pragma 指令的源码,就像这些指令不存在或位于不同位置一样。这可能会导致分析期间出现错误或分析结果不准确。对于包含 C++ 文件的动态分析和项目,与编译器头文件内使用 pragma 指令相关的编译警告信息(例如 inlinefunction_effects)可能被打印在 C++test 控制台上。在大多数情况下,这些警告指的是所测试代码的优化级别与原始项目中相同代码的优化级别不同,可以忽略。
  • IAR 编译器提供多种可以使用命令行选项启用的 C++ 模式(例如:EC++、EEC++、C++ 等)。启用 C++ 模式会强制将编译器命令行中存在的所有源文件视为以启用模式编译的 C++ 文件,与它们的扩展名无关。根据包含 C++ 模式选择项的 .bdf 文件创建 C++test 项目,C++test 可能选择编译器安装目录中的其他目录(如 bininc),并将它们视为链接文件夹。因此,您的分析范围可能包含其他文件,而这些文件刚好可能导致性能问题和 C++test 控制台不期望的信息。将不希望的链接文件夹从 C++test 项目中移除以避免这些问题。当根据 .bdf 文件创建新项目时,您还可以防止 C++test 选择其他目录。例如,在 GUI 中:
    1. 选择 文件> 新建> 项目> 创建 来自构建数据文件的项目
    2. 选择一个 .bdf 文件并验证设置
    3. 单击 下一步 并展开项目内容已找到不希望的文件夹。
    4. 右键单击文件夹,选择上下文菜单中的 删除文件夹 
  • 不支持以下关键字:
    • Special IAR '__no_alloc_str()' and '__no_alloc_str16()' built-in operators.
    • Special C-RUN operators like '__as_get_base()', __as_get_bounds()' and '__as_make_bounds()'.
    分析包含这些 IAR 扩展关键字的使用的代码将造成分析期间解析错误。 
  • 以下关键字具有部分支持:
    • Special IAR '__no_alloc' and '__no_alloc16' keywords.
    分析包含这些 IAR 扩展关键字的使用的代码可能造成分析过程出错,比如解析错误或检测代码编译错误。 
  • 有关各种支持的目标架构的已知限制的信息,请参阅下面特定于工具链的部分。
  • No labels