精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

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

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

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

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

實現方法

下面就分享一個最常用,也是最基礎的小技巧:在Keil MDK環境下,通過軟件代碼,直接映射到并存儲到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語言中,是一個關鍵字,語法格式為:

__attribute__ ((attribute-list))

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

這部分內容,大家可以不用深入理解,知道這么用即可。要深入理解,網上也有很多學習資源。

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程序

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

總是編譯版本文件

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

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

如下設置:

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

固件大小

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

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

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

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

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

2.網上還有一個方法,修改“ROM大小”:

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

該小之后,發現真的把0x00去掉了:

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

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

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6032

    文章

    44516

    瀏覽量

    633035
  • 代碼
    +關注

    關注

    30

    文章

    4748

    瀏覽量

    68356

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

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

收藏 人收藏

    評論

    相關推薦

    單片機調試常見問題與解決方法

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

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

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

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

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

    單片機基本io功能調試過程

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

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

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

    單片機boot0和boot1怎么設置

    單片機的啟動模式通常包括從內部ROM啟動、從外部ROM啟動、從外部Flash啟動等。 不同的啟動模式對應不同的Boot0和Boot1設置。 Boot0和Boot1的設置方法 Boot0和Boot1通常通過
    的頭像 發表于 08-22 09:50 ?1861次閱讀

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

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

    如何系統、科學地自學單片機

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

    單片機的BootLoader高階玩法

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

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

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

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

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

    8051單片機和STM32單片機的編程環境對比

    比較流行的單片機環境有keil和IAR,這兩種環境可以覆蓋市面上90%的單片機型號,而且都提供了函數庫。根據單片機位數不同,這兩個編程環境也有不同的版本
    發表于 12-25 10:01 ?1348次閱讀
    8051<b class='flag-5'>單片機</b>和STM32<b class='flag-5'>單片機</b>的編程環境對比

    單片機解析g代碼的方法

    的運動。 解析G代碼是將其轉化為單片機能夠理解和執行的指令集。單片機解析G代碼的方法主要包括以下幾個方面:G代碼的格式解析、指令的解析和執行、G代碼與機械設備的協調等。 首先,G代碼的格式解析是
    的頭像 發表于 12-22 14:15 ?1664次閱讀

    STM32單片機實現固件在線升級(IAP)

    1,固件升級方案綜述單片機固件升級方式有很多種。1、ICP:簡單說就是在單片機開發時使用燒錄器升級程序,比如使用J-Link燒錄單片機程序
    的頭像 發表于 12-16 08:00 ?5047次閱讀
    STM32<b class='flag-5'>單片機</b>實現<b class='flag-5'>固件</b>在線升級(IAP)

    單片機按鍵切換模式命令

    單片機按鍵切換模式命令的原理、實現方法和應用場景。 一、原理與概述 單片機系統是由單片機芯片、外部器件和外圍電路組成的一個完整的嵌入式系統。在系統設計中,為了使系統更加靈活、多樣化,通
    的頭像 發表于 12-15 10:31 ?2865次閱讀