2

语境:

我正在尝试使用 Keil 自动化嵌入式开发中的一些更平凡的任务。我的目标是在 Keil 项目中单击构建将运行一个预构建步骤,该步骤通过 Uncrustify(源代码美化器)运行所有代码,以确保它符合公司风格指南和帖子-build 步骤,然后通过 pc-lint(静态代码分析器)运行代码以突出显示它可能找到的任何潜在不安全代码。我编写了一个 PC 实用程序,它在 .uvproj 文件中搜索#define 宏、包含路径和文件路径,所有这些都是这两个工具所需的,然后修改构建前和构建后的用户命令以调用我的批处理文件将管理这两个步骤。uncrustify 部分工作正常, lint 部分正在产生一些明智的消息,

我的问题:

Lint 不断产生似乎与 Keil 编译器知道的宏相关的消息,但 Lint 不知道。我正试图找到一种方法来填补这个空白。我在 Keil 网站上找到了一个预定义宏表,这似乎是一个好的开始,但与其手动将它们复制到静态 .lnt 文件中,我想找到一种获取最新值的方法在项目建成时。这样,例如,每当开发人员更新他/她的 Keil 编译器时,都会更新“__ARMCC_VERSION”宏,而不是在我手动复制它时卡在某个时间点。

如果有人可以直接回答我的问题,我会很高兴,但如果有人对我可以尝试的更直接的替代方法提出可行的建议,我会同样高兴。非常感谢!

4

1 回答 1

1

我假设您使用的是 Keil ARM 编译器。

编译器用户指南

要列出在命令行上定义、由编译器预定义并在头文件和源文件中找到的宏,请--list_macros与非空源文件一起使用。

要仅列出编译器预定义并在命令行上指定的宏,请使用--list_macros空源文件。

编辑:

看起来您的 SDK 还添加了一些宏。

来自µVision 用户指南

根据 MDK 的使用情况,添加了以下控制字符串:

__UVISION_VERSION:

µVision 的主要和次要版本。例如:-D__UVISION_VERSION="520"

即食

在使用 RTE 时设置。例如:-D_RTE_

__RTX:

在Target-Target-Operation System 选项中选择RTX Kernel时设置。使用 RTE 时未设置。例如:。-D__RTX

__MICORLIB:

在Target-Target的 Options 中启用Use MicroLIB时设置。例如:。-D__MICROLIB

__评估:

µVision 在评估模式下运行。许可 MDK-Lite。例如:-D__EVAL

设备头名称

设备标头名称。

于 2017-06-28T01:50:58.540 回答