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

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

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

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

單片機固件中加入版本信息的方法

Q4MP_gh_c472c21 ? 來源:strongerHuang ? 作者:strongerHuang ? 2022-04-18 14:50 ? 次閱讀

平時我們寫程序,通常都會備注軟件版本,那么,怎么在單片機中保存版本信息呢?

方法其實有很多,但基本原理都是在指定存儲區(qū)域(Flash)中寫入軟件版本信息。

實現(xiàn)方法

下面就分享一個最常用,也是最基礎(chǔ)的小技巧:在Keil MDK環(huán)境下,通過軟件代碼,直接映射到并存儲到Flash指定地址。

包含:軟件版本、編譯日期、編譯時間,代碼如下:

#define VERINFO_ADDR_BASE (0x0800FF00) //存放FLASH的地址 const char Software_Ver[] __attribute__((at(VERINFO_ADDR_BASE + 0x00))) = “Software: 1.0.0”;const char Compiler_Date[] __attribute__((at(VERINFO_ADDR_BASE + 0x40))) = “Date: ”__DATE__;const char Compiler_Time[] __attribute__((at(VERINFO_ADDR_BASE + 0x60))) = “Time: ”__TIME__;

這個代碼大家能看懂么? 原理很簡單,也有類似其他寫入Flash地址的方法(這里暫不講述)。 這里面包含幾個重要知識點,下面給大家描述一下。

__attribute__ 語法

attribute,翻譯為“屬性”,在C語言中,是一個關(guān)鍵字,語法格式為:

__attribute__ ((attribute-list))

__attribute__ 可以設(shè)置函數(shù)屬性(Function Attribute )、變量屬性(Variable Attribute )和類型屬性(Type Attribute )。

這部分內(nèi)容,大家可以不用深入理解,知道這么用即可。要深入理解,網(wǎng)上也有很多學(xué)習(xí)資源。

C語言標準定義

在代碼中:

const char Compiler_Date[] __attribute__((at(VERINFO_ADDR_BASE + 0x40))) = “Date: ”__DATE__;const char Compiler_Time[] __attribute__((at(VERINFO_ADDR_BASE + 0x60))) = “Time: ”__TIME__;

你會看到__DATE__ 和 __TIME__表示的日期和時間。

其實,這兩個是C語言特殊的標準定義。

__DATE__:編譯時刻的日期字符串 如“Apr 13 2021”

__TIME__:編譯時刻的時間字符串 如”2000“

除了這兩個,其實還有很多類似的標準定義,比如:

__FILE__ :正在編譯文件的文件名__LINE__ :正在編譯文件的行號 __STDC__:判斷該文件是不是標準C程序

這部分內(nèi)容,可以參看我的文章:C語言幾種特殊標準定義和用法

總是編譯版本文件

在Keil MDK中,默認情況下,源文件不修改,只編譯一次。

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

如下設(shè)置:

815b64a8-bed7-11ec-9e50-dac502259ad0.png

固件大小

生成的Hex文件會對沒有使用的Falsh用0x00進行填充,比如:

816e37d6-bed7-11ec-9e50-dac502259ad0.png

填充0x00之后,這個hex就相對很大,因此,有兩種方法減少hex固件大小。

1.存放FLASH的地址,要設(shè)置在合適的位置,如果代碼量只有1K,你這只在偏移50K地址,這樣偏移太多。

#define VERINFO_ADDR_BASE (0x0800FF00) //存放FLASH的地址

2.網(wǎng)上還有一個方法,修改“ROM大小”:

81772364-bed7-11ec-9e50-dac502259ad0.png

該小之后,發(fā)現(xiàn)真的把0x00去掉了:

817fea08-bed7-11ec-9e50-dac502259ad0.png

這兩種方法,其實有一定風(fēng)險的,如果代碼量不斷增加,可能會出現(xiàn)問題。所以,大家要主要設(shè)置Flash地址。

審核編輯 :李倩

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

    關(guān)注

    6035

    文章

    44554

    瀏覽量

    634653
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4779

    瀏覽量

    68525

原文標題:單片機固件中加入版本信息的方法

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    單片機調(diào)試常見問題與解決方法

    燒錄到單片機時,燒錄軟件顯示無法與單片機通信。 解決方法: 檢查單片機的電源是否正常,確保電源電壓在規(guī)定的范圍內(nèi)。 檢查燒錄線的連接是否正確,包括數(shù)據(jù)線和地線。 確認燒錄軟件是否選擇了
    的頭像 發(fā)表于 11-01 14:11 ?662次閱讀

    把esp8266加入到c51單片機單通道程序怎么寫

    要將ESP8266模塊加入到C51單片機的單通道程序中,您需要了解如何通過串行通信(UART)與ESP8266進行通信。以下是如何實現(xiàn)這一點的步驟和示例代碼。 步驟 1:硬件連接 首先,您需要
    的頭像 發(fā)表于 10-18 11:32 ?564次閱讀

    采集電源信息單片機還是dsp

    在現(xiàn)代電子系統(tǒng)中,電源管理是一個至關(guān)重要的環(huán)節(jié)。隨著技術(shù)的發(fā)展,對電源信息的采集和處理需求也在不斷提高。在設(shè)計電源信息采集系統(tǒng)時,工程師們常常面臨一個選擇:是使用單片機(MCU)還是數(shù)字信號處理器
    的頭像 發(fā)表于 10-18 09:33 ?267次閱讀

    單片機基本io功能調(diào)試過程

    所使用的單片機型號以及需要調(diào)試的IO口。不同型號的單片機在IO口的配置和特性上可能有所不同。 查閱單片機手冊 : 查閱單片機的手冊或數(shù)據(jù)手冊,了解IO口的配置
    的頭像 發(fā)表于 09-14 14:38 ?561次閱讀

    單片機燒錄程序的線比單片機上的少還能燒錄嗎

    的存儲器通常分為兩類:ROM(只讀存儲器)和RAM(隨機存取存儲器)。ROM用于存儲程序代碼,而RAM用于存儲程序運行過程中的數(shù)據(jù)。燒錄過程就是將程序代碼寫入ROM中。 單片機燒錄方法 單片機燒錄的
    的頭像 發(fā)表于 09-02 09:54 ?482次閱讀

    單片機boot0和boot1怎么設(shè)置

    單片機的啟動模式通常包括從內(nèi)部ROM啟動、從外部ROM啟動、從外部Flash啟動等。 不同的啟動模式對應(yīng)不同的Boot0和Boot1設(shè)置。 Boot0和Boot1的設(shè)置方法 Boot0和Boot1通常通過
    的頭像 發(fā)表于 08-22 09:50 ?2395次閱讀

    使用ESP32的Release/v2.1.0.0版本的AT固件,想升級成自己編譯的AT固件版本,有什么方法可實現(xiàn)嗎?

    目前使用 ESP32 的 Release/v2.1.0.0 版本的 AT固件,想升級成自己編譯的 AT 固件版本,有什么方法可實現(xiàn)嗎?
    發(fā)表于 06-27 06:16

    請問如何在PSoC Creator中加入USB?

    如何在 PSoC Creator 中加入 USB?
    發(fā)表于 05-20 06:43

    如何系統(tǒng)、科學(xué)地自學(xué)單片機

    的自學(xué)單片機呢?自學(xué)單片機需要一定的計劃和方法,以下是具體的步驟和建議。如何系統(tǒng)、科學(xué)地自學(xué)單片機?學(xué)習(xí)電子基礎(chǔ)知識:理解電路原理、數(shù)字電子技術(shù)、模擬電子技術(shù)等基礎(chǔ)
    的頭像 發(fā)表于 03-28 08:03 ?1068次閱讀
    如何系統(tǒng)、科學(xué)地自學(xué)<b class='flag-5'>單片機</b>?

    單片機的BootLoader高階玩法

    經(jīng)過串口傳輸最終由單片機接收到的固件數(shù)據(jù)是可能出現(xiàn)差錯的,而有錯誤的固件冒然直接寫入到APP區(qū),是一定運行不起來的。
    發(fā)表于 03-08 13:58 ?710次閱讀
    <b class='flag-5'>單片機</b>的BootLoader高階玩法

    單片機的最小系統(tǒng)由什么組成 單片機的最小系統(tǒng)包括哪些

    單片機(Microcontroller Unit,MCU)的最小系統(tǒng)包括以下幾個主要組成部分: 單片機芯片:單片機是整個最小系統(tǒng)的核心部分,它集成了中央處理器(Central Processing
    的頭像 發(fā)表于 02-02 11:27 ?1.1w次閱讀

    怎么在直流電源中加入噪聲

    在直流電源中加入噪聲可以是為了模擬真實世界中的噪聲環(huán)境,也可以用于某些實驗中的需要。本文將詳細介紹在直流電源中加入噪聲的方法和技巧,并探討其可能的應(yīng)用。 首先,讓我們先了解噪聲的類型和特性。噪聲是一
    的頭像 發(fā)表于 01-16 11:00 ?1285次閱讀

    單片機通過USB升級固件方法

    單片機升級固件方法有很多中,比如:ISP(在系統(tǒng)編程)、ICP(在電路編程)、IAP(在應(yīng)用編程)等。
    的頭像 發(fā)表于 01-11 09:37 ?1945次閱讀
    <b class='flag-5'>單片機</b>通過USB升級<b class='flag-5'>固件</b>的<b class='flag-5'>方法</b>

    stc51單片機怎么燒錄

    步驟 常見問題與解決方法 STC51單片機是一種常見的8位單片機,廣泛應(yīng)用于各種嵌入式系統(tǒng)。它具有高性能、低成本、易于學(xué)習(xí)和使用等優(yōu)點。STC51單片機使用匯編語言或C語言進行編程,可
    的頭像 發(fā)表于 01-02 17:41 ?3367次閱讀

    8051單片機和STM32單片機的編程環(huán)境對比

    比較流行的單片機環(huán)境有keil和IAR,這兩種環(huán)境可以覆蓋市面上90%的單片機型號,而且都提供了函數(shù)庫。根據(jù)單片機位數(shù)不同,這兩個編程環(huán)境也有不同的版本
    發(fā)表于 12-25 10:01 ?1466次閱讀
    8051<b class='flag-5'>單片機</b>和STM32<b class='flag-5'>單片機</b>的編程環(huán)境對比
    主站蜘蛛池模板: asian4you裸模| 国产三级在线观看视频| 久久亚洲精品AV成人无码| 十次啦中文网| YELLOW视频在线观看大全| 老头操美女| 中文字幕无码一区二区免费| 国产又粗又黄又爽的大片| 色综合久久中文色婷婷| vagaa哇嘎黄短片| 青青青青久久久久国产的| 最新亚洲中文字幕在线观看| 精品在线观看一区| 亚洲呦女专区| 精品少妇高潮蜜臀涩涩AV| 一边吃奶一边啪啪真舒服| 精品久久久久久久高清| 伊人国产在线视频| 久久精品国产久精国产果冻传媒| 亚洲无码小格式| 久久人妻熟女中文字幕AV蜜芽 | 99精品视频免费观看| 暖暖视频大全免费观看| 超碰caoporon最新视频| 视频成人永久免费下载| 国产精品一区二区20P| 亚洲AV永久无码精品老司机蜜桃 | 国产美女久久久久久久久久久| 亚洲VA欧美VA天堂V国产综合| 极品虎白在线观看| 在线看片福利无码网址| 欧美大片免费| 国产精品久久久久久久人热| 亚洲中字幕永久在线观看| 玖玖爱精品视频| 成人精品亚洲| 亚洲精品一本之道高清乱码| 老女人与小伙子露脸对白| QVOD在线播放| 亚洲精品AV无码永久无码| 快穿之H啪肉|