修复与 TASKING 编译器相关的 Polyspace 编译错误
如果您为编译工具链(静态分析) 选项选择 tasking,则可能会遇到此问题。
问题
在 Polyspace® 分析过程中,您会看到与特定于 Tasking 编译器的扩展相关的错误,例如与特殊函数寄存器数据类型相关的错误。
解决方案
启用对 SFR 类型的支持
在使用 TASKING 编译器进行编译时,通常需要使用以下编译器标志来指定特殊函数寄存器 (SFR) 数据类型的声明位置:
--cpu=:编译器会在您的源文件中以xxx#include命令隐式包含文件sfr/reg。在以xxx.sfr#include命令包含该文件后,您可以使用在该.sfr文件中声明的特殊函数寄存器 (SFR)。--alternative-sfr-file:编译器使用替代 SFR 文件而不是常规 SFR 文件。您可以使用在该替代 SFR 文件中声明的特殊函数寄存器 (SFR)。
如果您为 Polyspace 分析指定了 TASKING 编译器,则该分析会对这些编译器标志做出如下假设:
--cpu=:此分析会选择一个特定值xxxxxx。如果您为 TASKING 编译器使用不同的值,则在 Polyspace 分析过程中可能会遇到错误。Polyspace 分析使用的
xxx值取决于您选择的目标处理器类型 (-target):tricore:
tc1793bc166:
xc167cirh850:
r7f701603arm:
ARMv7M
--alternative-sfr-file:此分析假设您不使用替代 SFR 文件。如果您使用替代 SFR 文件,则会遇到错误。
如下所示在 Polyspace 分析中使用命令行选项 -compiler-parameter。您可使用此命令行选项来让 Polyspace 识别您的编译器标志。在用户界面中,您可以在其他字段中输入此命令行选项。您可以多次输入此选项。
--cpu=:对于您的 Polyspace 分析,请使用xxx其中,-compiler-parameter --cpu=xxx
xxx是您在使用编译器进行编译时所使用的值。--alternative-sfr-file:对于您的 Polyspace 分析,请使用-compiler-parameter --alternative-sfr-file
如果您仍然因为 Polyspace 找不到您的
.asfr文件而遇到错误,请使用选项Include (-include)在预处理代码中以#include命令显式包含您的.asfr文件。通常,该文件的路径为
。例如,如果 TASKING 编译器安装在Tasking_C166_INSTALL_DIR\include\sfr\regCPUNAME.asfrC:\Program Files\Tasking\C166-VX_v4.0r1\,并且您使用与 CPU 相关的标志-Cxc2287m_104f或--cpu=xc2287m_104f,则路径为C:\Program Files\Tasking\C166-VX_v4.0r1\include\sfr\regxc2287m.asfr。当您跟踪编译命令时,如果使用了替代 SFR 文件,也可能会遇到相同的问题。有关详细信息,请参阅从编译系统创建 Polyspace 工程的要求。
启用对 TC1793 之外的 CPU 的支持
如果您为编译工具链(静态分析) 选项选择 tasking,则使用的 CPU 为 TC1793。如果您使用的是其他 CPU,请在您的工程中设置以下分析选项:
已禁用的预处理器定义 (-U):取消定义宏__CPU_TC1793B__。预处理器定义 (-D):定义宏__CPU__。输入__CPU__=,其中xxxxxx是您的 CPU 的名称。此外,请为您的 CPU 定义宏
__CPU_TC1793B__的等效体。例如,输入__CPU_TC1793A__。
如果您不是手动指定编译器,而是跟踪您的编译命令 (makefile),则 Polyspace 可以检测您的 CPU 并在工程中添加所需的定义。
避免使用不支持的构造
Polyspace 不支持某些特定于 TASKING 编译器的构造。
有关不支持的构造的列表,请参阅 中的 polyspaceroot\polyspace\verifier\code_prover_desktopcodeprover_limitations.pdf。其中, 是 Polyspace 的安装文件夹,例如 polyspacerootC:\Program Files\Polyspace\R2019a。