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

    文章

    16017

    浏览量

    343624
  • HEX文件
    +关注

    关注

    0

    文章

    21

    浏览量

    12668
  • BIN文件
    +关注

    关注

    0

    文章

    25

    浏览量

    8172
收藏 人收藏

    评论

    相关推荐

    单片机固件问题

    使用一个压力传感器与C8051F单片机相连进行数据传输。编一个单片机固件,通过固件将读取到的电压信号转换成对应的压力信号。本人新手一枚,有些都不懂这其中的意思?电压信号转换成压力信号不
    发表于 06-02 22:32

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

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

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

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

    如何在XHTML网页中加入CSS详细的五种方式说明

    本文档的主要内容详细介绍的是如何在XHTML网页中加入CSS详细的五种方式说明资料免费下载。
    发表于 06-13 16:58 5次下载

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

    本文介绍一个小技巧: 使用MDK编译器,让STM32程序HEX文件中加入固件版本信息。 代码 代码如下
    的头像 发表于 06-23 15:14 3588次阅读
    如何使用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 921次阅读

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

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

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

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

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

    这篇介绍一下如何在 MCU 程序中固定位置添加程序的版本信息等。
    的头像 发表于 02-15 15:36 725次阅读
    <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 431次阅读
    <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

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

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

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

    时我们写程序,通常都会备注软件版本,那么,怎么在单片机中保存版本信息呢? 方法其实有很多,但基本原理都是在指定存储区域(Flash)中写入软件版本
    发表于 08-22 09:16 197次阅读
    <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>

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

    SMT32的HEX文件里加入固件版本的方法
    的头像 发表于 09-18 15:34 402次阅读
    SMT32的HEX文件里<b class='flag-5'>加入</b><b class='flag-5'>固件</b><b class='flag-5'>版本</b>的方法