色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

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

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

前言

上一篇介紹完如何在程序中的固定位置添加版本信息,而且如何通過映像工具將版本信息和固件文件名關(guān)聯(lián)同步;這篇主要介紹一下通過 Git 工具管理的程序如何在 MCU 程序版本信息中增加 Git commot 提交的 id 。

Git 是一個(gè)開源的分布式版本控制系統(tǒng),可以有效、高速地處理從很小到非常大的項(xiàng)目版本管理。簡單來說就是用來管理程序版本的。

為什么增加 git 信息

通過上一篇我們了解到軟件版本信息可以通過映像工具修改 hex 或者 bin 文件,那么在軟件版本管理中,如果程序編譯后的同一個(gè)固件文件在多次進(jìn)行打包后,會(huì)存在多個(gè)已經(jīng)添加了版本信息的固件,但是可執(zhí)行程序內(nèi)容都是一樣的,在之后的管理中,如何區(qū)分不同版本的軟件功能是一樣的呢?

版本信息內(nèi)容的不同不影響可執(zhí)行文件的功能,通過文件對(duì)比雖然能確認(rèn)不同版本的固件中的可執(zhí)行程序是否一樣,但是還是比較繁瑣麻煩。

如果程序是通過 Git 工具管理的,那么此時(shí)可以通過 Git commot 提交 id 信息區(qū)分(每次提交的 id 值是不同的),通過在程序版本信息中添加 Git commot 提交 id 信息便能快速了解該版本固件對(duì)應(yīng)的源碼是哪一次提交的。

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

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

typedef struct
{
    char szVersion[32];    // 軟件版本
    char szBuildDate[32];  // 程序編譯日期
    char szBuildTime[32];  // 程序編譯時(shí)間
    char szCommitId[32];  // git commit id
}AppInfo_t;

2.通過__attribute__定義一個(gè)只讀結(jié)構(gòu)體變量(具體為什么這么實(shí)現(xiàn)可以看上一篇)。

const AppInfo_t __attribute__ ((section(".ARM.__at_0x08002000"))) sg_tAppInfo =
{
    "STM32_TEST",
    __DATE__,
    __TIME__,
    ""
};

3.提交git編譯后,可以看的git commit id 值

圖片

4.采用的映像工具 srec_cat,通過 Bat 腳本實(shí)現(xiàn)以下功能:

  1. 不需要修改代碼即可修改程序版本信息
  2. 按照當(dāng)前固件打包時(shí)間作為程序的版本信息,同時(shí)按照版本信息命名文件
  3. 版本命名格式為:STM32_T2206111526
  4. 添加 Git Commit id 信息(新增)

根據(jù)目錄結(jié)構(gòu)樹編寫指定腳本(該目錄必須是git倉庫)

.git
MDK_STM32
    ---- CORE
    ---- STM32F10x_FWLib
    ---- OBJ(編譯生成的hex文件)
    ---- USER
tool
    ---- srec_cat.exe
    ---- pack.bat

實(shí)現(xiàn) pack.bat(上一篇的腳本文件有些缺陷,發(fā)現(xiàn)修改路徑和文件名后不能正常打包,可私信回復(fù)關(guān)鍵詞“固件”或“固件打包”獲取下載鏈接):

:: 版本信息前綴和長度
set strPrefix=STM32_
set strPrefixlen=6

:: hex 文件路徑和文件名
set hexFilePath=..\\MDK_STM32\\OBJ
set hexFileName=main

:: 版本信息起始地址
set verStringAddr=0x08002000

:: git commit id信息起始地址
set commitIdStringAddr=0x08002060

if %time:~0,2% leq 9 (set hour=0%time:~1,1%) else (set hour=%time:~0,2%)
if %time:~0,2% leq 9 (set minute=%time:~2,2%) else (set minute=%time:~3,2%)

:: 打包時(shí)間格式為年月日時(shí)分 T2206111526
set strTime=T%date:~2,2%%date:~5,2%%date:~8,2%%hour%%minute%
set strVersion=%strPrefix%%strTime%

:: 獲取commit id
@for /F %%i in ('git rev-parse --short HEAD') do @set commitid=%%i
@echo commitid=%commitid%

copy %hexFilePath%\\%hexFileName% .\\

:: 版本信息的結(jié)束地址
set /a InfoEnd=%verStringAddr%+%strPrefixlen%+11

.\\srec_cat.exe -generate %verStringAddr% %InfoEnd% -repeat-string %strVersion% %hexFilePath%\\%hexFileName%.hex -intel -exclude %verStringAddr% %InfoEnd% -o .\\tmp_%strVersion%.hex -intel

:: git commit id 信息的結(jié)束地址
set /a InfoEnd=%commitIdStringAddr%+7

.\\srec_cat.exe -generate %commitIdStringAddr% %InfoEnd% -repeat-string %commitid% .\\tmp_%strVersion%.hex -intel -exclude %commitIdStringAddr% %InfoEnd% -o .\\%strVersion%.hex -intel

del %hexFileName%.hex
del .\\tmp_%strVersion%.hex

5.編譯完成后,雙擊 pack.bat 生成添加版本信息后的固件。

圖片

6.之后需要通過 J-LINK 工具包或者 ST-Link 工具打開生成的固件進(jìn)行燒錄(通過Keil編譯直接下載的沒有用,我這里用的是 ST-Link 工具)。

圖片

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

    關(guān)注

    146

    文章

    17312

    瀏覽量

    352208
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3795

    瀏覽量

    81289
  • Git
    Git
    +關(guān)注

    關(guān)注

    0

    文章

    201

    瀏覽量

    15797
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

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

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

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

    本文介紹一個(gè)小技巧: 使用MDK編譯器,讓STM32程序HEX文件中加入固件版本信息。 代碼 代碼如下
    的頭像 發(fā)表于 06-23 15:14 ?4096次閱讀
    如何使用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ā)的工程師,都會(huì)使用操作寄存器的方式來使用
    發(fā)表于 11-23 18:07 ?15次下載
    華大<b class='flag-5'>單片機(jī)</b>如何向MDK<b class='flag-5'>中加入</b>頭文件和庫文件

    單片機(jī)的燒錄方式:ISP、ICP、IAP的區(qū)別

    單片機(jī)的燒錄方式單片機(jī)三種燒錄方式ISP、IAP和ICP什么不同?單片機(jī)三種燒錄
    發(fā)表于 12-03 18:21 ?27次下載
    <b class='flag-5'>單片機(jī)</b>的燒錄<b class='flag-5'>方式</b>:ISP、ICP、IAP的區(qū)別

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

    本文介紹一個(gè)小技巧:使用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ī)固件中加入版本信息的方法

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

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

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

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

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

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

    開發(fā)完MCU軟件后,通常都會(huì)生成hex文件或者bin文件,用來做固件燒錄或者升級(jí),如果用來做產(chǎn)品開發(fā),就涉及到固件版本的問題,初學(xué)者通常采用固件文件重命名來區(qū)分
    的頭像 發(fā)表于 02-15 15:13 ?1457次閱讀
    <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>哪些?-1

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

    這篇介紹一下如何在 MCU 程序中固定位置添加程序的版本信息等。
    的頭像 發(fā)表于 02-15 15:36 ?1274次閱讀
    <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ī)中保存版本信息呢?

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

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

    時(shí)我們寫程序,通常都會(huì)備注軟件版本,那么,怎么在單片機(jī)中保存版本信息呢? 方法其實(shí)有很多,但基本原理都是在指定存儲(chǔ)區(qū)域(Flash)中寫入軟件版本
    發(fā)表于 08-22 09:16 ?456次閱讀
    <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)固件在線升級(jí)(IAP)

    1,固件升級(jí)方案綜述單片機(jī)固件升級(jí)方式很多種。1、ICP:簡單說就是在單片機(jī)開發(fā)時(shí)使用燒錄器
    的頭像 發(fā)表于 12-16 08:00 ?5593次閱讀
    STM32<b class='flag-5'>單片機(jī)</b>實(shí)現(xiàn)<b class='flag-5'>固件</b>在線升級(jí)(IAP)
    主站蜘蛛池模板: 国产中文字幕乱码一区| 欧美黄色第一页| 色老汉网址导航| 国产精品一国产精品免费| 性生片30分钟| 亚洲欭美日韩颜射在线二| 久久九九有精品国产23百花影院| 与子敌伦刺激对白亂輪亂性| 男生互捏jiji的故事| 穿着丝袜被男生强行啪啪| 色婷婷综合久久久久中文一区二区| 国产精品久久久久久亚洲毛片 | 啦啦啦 中文 日本 韩国 免费| 亚洲高清视频网站| 一二三四在线观看高清电视剧 | 欧美亚洲国产免费高清视频| 芳草地在线观看免费视频| 亚洲视频无码中字在线| 嫩小xxxxbbbb| 国产精品伊人| 中字幕视频在线永久在线观看免费 | 国产精品久久久久久亚洲毛片 | 无套内谢大学生A片| 国内久经典AAAAA片| 亚洲欧美国产双大乳头| 久久精品成人免费网站| 伊人久久精品99热超碰| 美女被免费喷白浆视频| hdsex老太婆70| 色中色辩论区| 和尚轮流澡到高潮H| 一品道门在线观看免费视频| 免费a毛片| 俄罗斯摘花| 亚洲欧美一区二区三区导航| 伦理片天堂eeuss影院2o12| RAPPER性骚扰大开黄腔| 午夜深情在线观看免费| 九九免费的视频| xxxxxx日本处大片免费看| 午夜福利合集1000在线|