【ARM】生成相同的十六进制或二进制构建输出需要满足什么标准?-2022

仔细阅读以下清单可以帮助您确保在开发阶段可以在不同的PC上生成相同的十六进制或二进制构建输出,或者由于旧项目的维护需求而可以重新生成。

  • 使用相同的Arm编译器工具链版本。使用相同版本的MDK可以轻松确保项目中使用相同的Arm 编译器工具链。如果使用不同的MDK版本,请下载某个版本的Arm编译器工具链并将其集成到MDK uVision中。
  • 使用相同的编译器和链接器命令行选项来构建项目。在不使用 MDK uVision IDE的命令行中构建项目时,这一点尤其重要。
  • 使用相同版本的软件包。获得显示项目中使用的所有软件包的详细列表的方法,例如设备系列包 (DFP)、CMSIS、MDK中间件包等,是在uVision中打开“管理运行时环境”对话框并单击“详细信息”,如以下屏幕截图所示。将在包含此类列表的同一项目文件夹中生成Packs_*.htm文件。对于缺少此“详细信息”按钮的旧MDK uVision v5.x版本,打开构建日志文件还可以为您提供项目中使用的所有软件包的详细列表。


为了确保在项目中使用特定版本的软件包,建议在选择软件包对话框中禁用默认选项“使用所有已安装软件包的最新版本”,如下图所示:

  • 如果使用MDK uVision构建项目,请确保uVision的Project窗口中列出的所有源代码在不同的PC上具有相同的顺序。项目的所有源代码都按照项目窗口中显示的该项目树的顺序编译,然后通过armlink以相同的顺序链接。如果编译的模块通过armlink以不同的顺序链接,可能会导致不同的十六进制或二进制构建输出。在项目对象输出文件夹中检查和比较uVision生成的*.lnp Linker Input File,也可以确保编译后的模块通过armlink以相同的顺序链接。
  • 避免在源代码中使用时间戳、系统环境变量、编译器宏(例如__DATE__或__FILE__)等,这些在不同的PC上可能会有所不同。