【问题标题】:Is there a way to export the predefined macros from a Keil build configuration?有没有办法从 Keil 构建配置中导出预定义的宏?
【发布时间】:2017-06-23 10:10:01
【问题描述】:

上下文:

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

我的问题:

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

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

【问题讨论】:

    标签: lint keil predefined-macro


    【解决方案1】:

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

    来自Compiler User Guide

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

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

    编辑:

    您的 SDK 似乎还添加了一些宏。

    来自µVision User's Guide

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

    __UVISION_VERSION:

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

    RTE

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

    __RTX:

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

    __MICORLIB:

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

    __EVAL:

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

    设备头名称

    设备头名称。

    【讨论】:

    • 这正是我一直在寻找的东西。与空源文件“armcc.exe empty.c --list_macros”一起使用时,它并不能完全生成所有正确的值,因为“_TARGET_CPU,,,”宏以及优化设置被设置为不正确的默认值。为了克服这个问题,在我的情况下(使用 cortex-M3 cpu,没有优化并使用 RTX 内核)我能够产生我想要的输出,通过使用:'armcc.exe --cpu "Cortex-M3" -O0 -D__RTX empty.c --list_macros' 这样输出几乎与内置 Lint 工具生成和使用的 .h 文件相同。
    • 剩下的只是 __UVISION_VERSION 宏,我在原始问题中提到过。目前,至少在我获得一些克服它的灵感之前,我只会处理硬编码,因为它似乎不会以任何方式显着影响代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 2012-06-25
    • 2018-01-07
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    相关资源
    最近更新 更多