RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

單片機(jī)固件中加入版本信息的方式有哪些?-1

汽車電子技術(shù) ? 來源:大橙子瘋嵌入式 ? 作者:大橙子瘋 ? 2023-02-15 15:13 ? 次閱讀

前言

開發(fā)完MCU軟件后,通常都會生成hex文件或者bin文件,用來做固件燒錄或者升級,如果用來做產(chǎn)品開發(fā),就涉及到固件版本的問題,初學(xué)者通常采用固件文件重命名來區(qū)分版本。

如果需要每次上電開機(jī)通過串口或者OLED等顯示版本信息,那么這種方式就無法實(shí)現(xiàn)

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

實(shí)現(xiàn)方式

1.定義一個結(jié)構(gòu)體,里面定義一些軟件版本相關(guān)的信息

typedef struct
{
    char szVersion[32];    // 軟件版本
    char szBuildDate[32];  // 程序編譯日期
    char szBuildTime[32];  // 程序編譯時間
}AppInfo_t;

2.定義一個只讀結(jié)構(gòu)體變量(只讀的目的:防止程序改變、節(jié)約RAM),賦初值(其中__DATE___TIME__C語言中的內(nèi)置宏,分別是當(dāng)前的編譯日期和編譯時間)。

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

3.在主函數(shù)添加打印,將版本信息輸出到終端上。

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 中,默認(rèn)情況下,源文件不修改,只會編譯一次。

如果定于sg_tAppInfo變量的源文件沒有修改而其它文件修改時,編譯日期和編譯時間還是之前的

為了編譯版本、日期和時間正確,需要進(jìn)行設(shè)置:總是編譯

圖片

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

圖片

擴(kuò)展

從上述的實(shí)現(xiàn)方式可知,sg_tAppInfo只讀變量在程序中的位置不固定,有一定的局限性。

如果結(jié)構(gòu)體有其他的信息,無法在編譯時初始化,而是需要在程序編譯后的hex文件中添加或者修改信息,但由于只讀變量在程序中的位置不固定,不能保證每次編譯后在固定的位置添加或者修改信息。

下一篇介紹通過__attribute__機(jī)制固定sg_tAppInfo只讀變量在程序中的地址,同時采用映像文件工具對hex固件文件進(jìn)行操作,自動將固件中的版本信息和固件文件名稱關(guān)聯(lián)起來。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17123

    瀏覽量

    350983
  • HEX文件
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    12747
  • BIN文件
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    8282
收藏 人收藏

    評論

    相關(guān)推薦

    華大單片機(jī)是如何向MDK中加入頭文件和庫文件的

    華大單片機(jī)如何向MDK中加入頭文件和庫文件關(guān)鍵文件介紹加入頭文件大多數(shù)習(xí)慣于8位單片機(jī)開發(fā)的工程師,都會使用操作寄存器的方式來使用
    發(fā)表于 07-13 08:43

    請問單片機(jī)如何向MDK中加入頭文件和庫文件?

    請問單片機(jī)如何向MDK中加入頭文件和庫文件?
    發(fā)表于 09-27 08:32

    如何更簡單的給單片機(jī)更新固件?

    當(dāng)單片機(jī)已經(jīng)焊接到電路板上時,如何更簡單更便捷的為單片機(jī)升級固件便成了一件值得深思的問題。本文介紹了一種更簡單更便捷的固件升級方式,不需要任
    的頭像 發(fā)表于 10-23 18:19 ?1.7w次閱讀
    如何更簡單的給<b class='flag-5'>單片機(jī)</b>更新<b class='flag-5'>固件</b>?

    如何使用MDK編譯器讓STM32程序HEX文件中加入固件版本信息

    本文介紹一個小技巧: 使用MDK編譯器,讓STM32程序HEX文件中加入固件版本信息。 代碼 代碼如下
    的頭像 發(fā)表于 06-23 15:14 ?4046次閱讀
    如何使用MDK編譯器讓STM32程序HEX文件<b class='flag-5'>中加入</b><b class='flag-5'>固件</b><b class='flag-5'>版本</b><b class='flag-5'>信息</b>

    華大單片機(jī)如何向MDK中加入頭文件和庫文件

    華大單片機(jī)如何向MDK中加入頭文件和庫文件關(guān)鍵文件介紹加入頭文件大多數(shù)習(xí)慣于8位單片機(jī)開發(fā)的工程師,都會使用操作寄存器的方式來使用
    發(fā)表于 11-23 18:07 ?15次下載
    華大<b class='flag-5'>單片機(jī)</b>如何向MDK<b class='flag-5'>中加入</b>頭文件和庫文件

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

    本文介紹一個小技巧:使用MDK編譯器,讓STM32程序HEX文件中加入固件版本信息。
    發(fā)表于 02-08 15:28 ?0次下載
    SMT32的HEX文件里<b class='flag-5'>加入</b><b class='flag-5'>固件</b><b class='flag-5'>版本</b>的方法

    單片機(jī)固件中加入版本信息的方法

    平時我們寫程序,通常都會備注軟件版本,那么,怎么在單片機(jī)中保存版本信息呢?方法其實(shí)有很多,但基本原理都是在指定存儲區(qū)域(Flash)中寫入軟件版本
    的頭像 發(fā)表于 04-18 14:50 ?1120次閱讀

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

    使用MDK編譯器,讓STM32程序HEX文件中加入固件版本信息。
    的頭像 發(fā)表于 08-14 16:13 ?4350次閱讀

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

    使用MDK編譯器,讓STM32程序HEX文件中加入固件版本信息。
    的頭像 發(fā)表于 02-01 09:37 ?3857次閱讀

    單片機(jī)固件中加入版本信息方式哪些?-2

    這篇介紹一下如何在 MCU 程序中固定位置添加程序的版本信息等。
    的頭像 發(fā)表于 02-15 15:36 ?1209次閱讀
    <b class='flag-5'>單片機(jī)</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

    單片機(jī)固件中加入版本信息方式哪些?-3

    這篇主要介紹一下通過 Git 工具管理的程序如何在 MCU 程序版本信息中增加 Git commot 提交的 id 。
    的頭像 發(fā)表于 02-15 15:38 ?719次閱讀
    <b class='flag-5'>單片機(jī)</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

    介紹單片機(jī) MCU 固件打包腳本軟件

    1. 基于 Windows 平臺的單片機(jī) MCU 固件腳本打包工具
    的頭像 發(fā)表于 02-15 15:40 ?1361次閱讀
    介紹<b class='flag-5'>單片機(jī)</b> MCU <b class='flag-5'>固件</b>打包腳本軟件

    怎么在單片機(jī)中保存版本信息呢?

    平時我們寫程序,通常都會備注軟件版本,那么,怎么在單片機(jī)中保存版本信息呢?
    的頭像 發(fā)表于 04-18 15:12 ?826次閱讀

    單片機(jī)固件如何加入版本信息

    時我們寫程序,通常都會備注軟件版本,那么,怎么在單片機(jī)中保存版本信息呢? 方法其實(shí)有很多,但基本原理都是在指定存儲區(qū)域(Flash)中寫入軟件版本
    發(fā)表于 08-22 09:16 ?431次閱讀
    <b class='flag-5'>單片機(jī)</b><b class='flag-5'>固件</b>如何<b class='flag-5'>加入</b><b class='flag-5'>版本</b><b class='flag-5'>信息</b>

    STM32單片機(jī)實(shí)現(xiàn)固件在線升級(IAP)

    1,固件升級方案綜述單片機(jī)固件升級方式很多種。1
    的頭像 發(fā)表于 12-16 08:00 ?5300次閱讀
    STM32<b class='flag-5'>單片機(jī)</b>實(shí)現(xiàn)<b class='flag-5'>固件</b>在線升級(IAP)
    RM新时代网站-首页