0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机固件中加入版本信息的方式有哪些?-1

汽车电子技术 来源:大橙子疯嵌入式 作者:大橙子疯 2023-02-15 15:13 次阅读

前言

开发完MCU软件后,通常都会生成hex文件或者bin文件,用来做固件烧录或者升级,如果用来做产品开发,就涉及到固件版本的问题,初学者通常采用固件文件重命名来区分版本。

如果需要每次上电开机通过串口或者OLED等显示版本信息,那么这种方式就无法实现

下面介绍如何在程序中加入版本信息,以MDK为例介绍。

实现方式

1.定义一个结构体,里面定义一些软件版本相关的信息

typedef struct
{
    char szVersion[32];    // 软件版本
    char szBuildDate[32];  // 程序编译日期
    char szBuildTime[32];  // 程序编译时间
}AppInfo_t;

2.定义一个只读结构体变量(只读的目的:防止程序改变、节约RAM),赋初值(其中__DATE___TIME__C语言中的内置宏,分别是当前的编译日期和编译时间)。

const AppInfo_t sg_tAppInfo =
{
    "STM32_V0.1.5",
    __DATE__,
    __TIME__,
};

3.在主函数添加打印,将版本信息输出到终端上。

int main(void)
{
    SystemInit();

    printf("Version  : %s\\r\\n", sg_tAppInfo.szVersion);
    printf("buildTime: %s\\r\\n", sg_tAppInfo.szBuildDate);
    printf("buildTime: %s\\r\\n", sg_tAppInfo.szBuildTime);

    while (1)
    {

    }
}

4.在 Keil MDK 中,默认情况下,源文件不修改,只会编译一次。

如果定于sg_tAppInfo变量的源文件没有修改而其它文件修改时,编译日期和编译时间还是之前的

为了编译版本、日期和时间正确,需要进行设置:总是编译

图片

5.下载程序后,通过串口工具在MCU上电就能收到版本信息的打印

图片

扩展

从上述的实现方式可知,sg_tAppInfo只读变量在程序中的位置不固定,有一定的局限性。

如果结构体有其他的信息,无法在编译时初始化,而是需要在程序编译后的hex文件中添加或者修改信息,但由于只读变量在程序中的位置不固定,不能保证每次编译后在固定的位置添加或者修改信息。

下一篇介绍通过__attribute__机制固定sg_tAppInfo只读变量在程序中的地址,同时采用映像文件工具对hex固件文件进行操作,自动将固件中的版本信息和固件文件名称关联起来。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16977

    浏览量

    350215
  • HEX文件
    +关注

    关注

    0

    文章

    26

    浏览量

    12723
  • BIN文件
    +关注

    关注

    0

    文章

    26

    浏览量

    8266
收藏 人收藏

    评论

    相关推荐

    华大单片机是如何向MDK中加入头文件和库文件的

    华大单片机如何向MDK中加入头文件和库文件关键文件介绍加入头文件大多数习惯于8位单片机开发的工程师,都会使用操作寄存器的方式来使用
    发表于 07-13 08:43

    请问单片机如何向MDK中加入头文件和库文件?

    请问单片机如何向MDK中加入头文件和库文件?
    发表于 09-27 08:32

    如何更简单的给单片机更新固件

    单片机已经焊接到电路板上时,如何更简单更便捷的为单片机升级固件便成了一件值得深思的问题。本文介绍了一种更简单更便捷的固件升级方式,不需要任
    的头像 发表于 10-23 18:19 1.7w次阅读
    如何更简单的给<b class='flag-5'>单片机</b>更新<b class='flag-5'>固件</b>?

    如何使用MDK编译器让STM32程序HEX文件中加入固件版本信息

    本文介绍一个小技巧: 使用MDK编译器,让STM32程序HEX文件中加入固件版本信息。 代码 代码如下
    的头像 发表于 06-23 15:14 3991次阅读
    如何使用MDK编译器让STM32程序HEX文件<b class='flag-5'>中加入</b><b class='flag-5'>固件</b><b class='flag-5'>版本</b><b class='flag-5'>信息</b>

    华大单片机如何向MDK中加入头文件和库文件

    华大单片机如何向MDK中加入头文件和库文件关键文件介绍加入头文件大多数习惯于8位单片机开发的工程师,都会使用操作寄存器的方式来使用
    发表于 11-23 18:07 15次下载
    华大<b class='flag-5'>单片机</b>如何向MDK<b class='flag-5'>中加入</b>头文件和库文件

    SMT32的HEX文件里加入固件版本的方法

    本文介绍一个小技巧:使用MDK编译器,让STM32程序HEX文件中加入固件版本信息
    发表于 02-08 15:28 0次下载
    SMT32的HEX文件里<b class='flag-5'>加入</b><b class='flag-5'>固件</b><b class='flag-5'>版本</b>的方法

    单片机固件中加入版本信息的方法

    平时我们写程序,通常都会备注软件版本,那么,怎么在单片机中保存版本信息呢?方法其实有很多,但基本原理都是在指定存储区域(Flash)中写入软件版本
    的头像 发表于 04-18 14:50 1096次阅读

    STM32程序HEX文件中加入固件版本信息

    使用MDK编译器,让STM32程序HEX文件中加入固件版本信息
    的头像 发表于 08-14 16:13 4312次阅读

    SMT32的HEX文件里加入固件版本的方法

    使用MDK编译器,让STM32程序HEX文件中加入固件版本信息
    的头像 发表于 02-01 09:37 3816次阅读

    单片机固件中加入版本信息方式哪些?-2

    这篇介绍一下如何在 MCU 程序中固定位置添加程序的版本信息等。
    的头像 发表于 02-15 15:36 1163次阅读
    <b class='flag-5'>单片机</b><b class='flag-5'>固件</b><b class='flag-5'>中加入</b><b class='flag-5'>版本</b><b class='flag-5'>信息</b>的<b class='flag-5'>方式</b><b class='flag-5'>有</b>哪些?-2

    单片机固件中加入版本信息方式哪些?-3

    这篇主要介绍一下通过 Git 工具管理的程序如何在 MCU 程序版本信息中增加 Git commot 提交的 id 。
    的头像 发表于 02-15 15:38 688次阅读
    <b class='flag-5'>单片机</b><b class='flag-5'>固件</b><b class='flag-5'>中加入</b><b class='flag-5'>版本</b><b class='flag-5'>信息</b>的<b class='flag-5'>方式</b><b class='flag-5'>有</b>哪些?-3

    介绍单片机 MCU 固件打包脚本软件

    1. 基于 Windows 平台的单片机 MCU 固件脚本打包工具
    的头像 发表于 02-15 15:40 1319次阅读
    介绍<b class='flag-5'>单片机</b> MCU <b class='flag-5'>固件</b>打包脚本软件

    怎么在单片机中保存版本信息呢?

    平时我们写程序,通常都会备注软件版本,那么,怎么在单片机中保存版本信息呢?
    的头像 发表于 04-18 15:12 791次阅读

    单片机固件如何加入版本信息

    时我们写程序,通常都会备注软件版本,那么,怎么在单片机中保存版本信息呢? 方法其实有很多,但基本原理都是在指定存储区域(Flash)中写入软件版本
    发表于 08-22 09:16 377次阅读
    <b class='flag-5'>单片机</b><b class='flag-5'>固件</b>如何<b class='flag-5'>加入</b><b class='flag-5'>版本</b><b class='flag-5'>信息</b>

    STM32单片机实现固件在线升级(IAP)

    1固件升级方案综述单片机固件升级方式很多种。1
    的头像 发表于 12-16 08:00 4998次阅读
    STM32<b class='flag-5'>单片机</b>实现<b class='flag-5'>固件</b>在线升级(IAP)