在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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地址。

審核編輯 :李倩

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

    關注

    6064

    文章

    44931

    瀏覽量

    647453
  • 代碼
    +關注

    關注

    30

    文章

    4891

    瀏覽量

    70300

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

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    DLPR150PROM-2.3.1版本固件是否包含圖像信息,如何切換圖像?

    DLPR150PROM-2.3.1版本固件是否包含圖像信息,如何切換圖像?DLPC150 Programmer’s Guide文檔沒有相關內容。
    發表于 02-21 06:53

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

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

    如何實現51單片機與PC的串行通信

    的詳細步驟和方法。 硬件連接 首先,我們需要將51單片機與PC的串行接口連接起來。通常,我們使用RS-232接口進行連接。RS-232接口是一種常用的串行通信接口,它使用9個引腳進行數據傳輸。以下是連接步驟: a. 將51
    的頭像 發表于 10-21 11:35 ?2445次閱讀

    單片機怎么寫入程序

    單片機(Microcontroller Unit,MCU)是一種集成電路芯片,它將計算機的CPU、存儲器、輸入/輸出接口等功能集成在一個芯片上。單片機廣泛應用于嵌入式系統和物聯網設備中。編寫單片機
    的頭像 發表于 10-21 11:21 ?2182次閱讀

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

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

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

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

    單片機的中斷機制

    單片機的中斷機制是一種重要的處理方式,它允許單片機在執行主程序的過程中,能夠暫停當前任務,轉而處理外部或內部緊急事件。這種機制極大地提高了系統的響應速度和處理能力,使得單片機在各種應用領域中得到廣泛應用。以下是對
    的頭像 發表于 10-17 18:03 ?1819次閱讀

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

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

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

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

    單片機燒錄程序的基本步驟是什么

    單片機燒錄程序是單片機開發過程中非常重要的一步,它涉及到將編寫好的程序代碼通過一定的方式傳輸到單片機內部的存儲器中,使單片機能夠按照預定的邏輯執行任務。 一、硬件準備
    的頭像 發表于 09-02 09:47 ?2505次閱讀

    提高MSP430G系列單片機的Flash擦寫壽命的方法

    電子發燒友網站提供《提高MSP430G系列單片機的Flash擦寫壽命的方法.pdf》資料免費下載
    發表于 08-28 11:51 ?0次下載
    提高MSP430G系列<b class='flag-5'>單片機</b>的Flash擦寫壽命的<b class='flag-5'>方法</b>

    單片機boot0和boot1怎么設置

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

    UCGUI單片機源碼

    UCGUI單片機源碼
    發表于 07-04 17:11 ?1次下載

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

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

    基于51單片機數字時鐘鬧鐘設計

    本資源內容概要:? ? ? ?這是基于51單片機數字時鐘鬧鐘設計包含了PDF版本電路圖、C語言程序源代碼(keil軟件打開)、proteus仿真。本資源適合人群:? ? ? 單片機愛好者、電子
    發表于 06-25 10:17 ?0次下載
    主站蜘蛛池模板: 波多野结衣在线网址 | 亚洲国产精品久久久久婷婷老年 | 四虎影视永久在线 yin56xyz | 成人在线网 | 四虎中文 | 殴美一级 | 在线免费看高清视频大全 | 欧美成人影院 | 免费国产一区 | 综合天天 | 狠狠干成人 | 国产小视频在线免费 | 你懂得国产 | 久久天天躁狠狠躁夜夜 | riav久久中文一区二区 | 五月婷婷丁香 | 在线观看免费xx高清视频 | 成人最新午夜免费视频 | 天堂资源在线www中文 | 欧美一区二区在线观看视频 | 色之综合天天综合色天天棕色 | 日操夜操天天操 | 美女啪啪91 | 狠狠色丁香婷婷综合视频 | 狠狠色噜噜狠狠狠狠奇米777 | 一卡二卡≡卡四卡亚洲高清 | 国产自产视频在线观看香蕉 | 男人天堂伊人 | 亚洲精品久久久久久婷婷 | 5x视频在线观看 | 夜夜摸天天操 | 六月丁香深爱六月综合激情 | 中文字幕在线观看你懂的 | 又潮又黄的叫床视频 | 午夜久| 能在线观看的一区二区三区 | 国产主播一区二区 | 主人扒开腿揉捏花蒂调教cfh | 国产一区二区三区四卡 | 四虎影院国产精品 | 一区不卡在线观看 |