ST意法半导体
直播中

王利祥

7年用户 1403经验值
私信 关注
[问答]

请问如何将编译日期存储在最终的二进制文件中以便外部程序读取它?

我正在尝试将一个项目从 IAR 迁移到 STM32CubeIDE。在这个项目中,我在 main 中有两行代码(作为全局变量)将编译日期存储在最终的二进制文件中。这两行如下:
  • char const compilation_date[] ={'<','c','>',__DATE__[0],__DATE__[1],__DATE__[2],__DATE__[3],__DATE__[4],__DATE__[5],__DATE__[6],__DATE__[7],__DATE__[8],__DATE__[9],__DATE__[10],'<','/','c','>'};
  • #pragma required=compilation_date
第一行构建编译字符串日期,第二行告诉 IAR 编译器,尽管代码中未引用该变量,但它必须将其包含在最终二进制文件中。
要将它迁移到 STM32CubeIDE(使用 gcc 编译器),我需要使用 __attribute__((used)) 而不是#pragma required=compilation_date。所以,移植的代码行是
  • char const compilation_month[] __attribute__((used)) ={'<','c','>',__DATE__[0],__DATE__[1],__DATE__[2],__DATE__[3],__DATE__[4],__DATE__[5],__DATE__[6],__DATE__[7],__DATE__[8],__DATE__[9],__DATE__[10],'<','/','c','>'};
问题是当我编译程序时出现以下错误:
  • ../Core/Src/main.c: error: initializer element is not constant
原因是 gcc 期望全局变量存储常量值而不是编译时确定的值。
所以,问题是:如何将编译日期存储在最终的二进制文件中?
PS:我的目标是我可以读取二进制文件的编译日期(使用Windows或Linux)








回帖(1)

李凯生

2023-1-31 16:42:14

  • __attribute__((used))
  • static char compilation_date[] = "" __DATE__ "";
举报

更多回帖

发帖
×
20
完善资料,
赚取积分