為什么要軟件版本號(hào)呢?
生成軟件版本號(hào)是在軟件開(kāi)發(fā)和維護(hù)過(guò)程中非常重要的一項(xiàng)任務(wù),它有很多意義和好處,同時(shí)也有多種常見(jiàn)的方法。
- 標(biāo)識(shí)和追蹤 :軟件版本號(hào)是唯一的標(biāo)識(shí)符,用于區(qū)分不同版本的軟件。這有助于開(kāi)發(fā)人員和用戶識(shí)別和追蹤軟件的不同發(fā)布版本。當(dāng)出現(xiàn)問(wèn)題時(shí),可以更容易地確定特定版本中的錯(cuò)誤或改進(jìn)。
- 溝通和文檔 :版本號(hào)提供了一種簡(jiǎn)單而清晰的方式來(lái)與團(tuán)隊(duì)成員、用戶和其他利益相關(guān)者進(jìn)行溝通。通過(guò)版本號(hào),人們可以明確了解到底是哪個(gè)版本的軟件正在討論,從而更容易地協(xié)作和解決問(wèn)題。
- 發(fā)布計(jì)劃 :版本號(hào)可以用于制定和執(zhí)行軟件的發(fā)布計(jì)劃。通過(guò)設(shè)定版本號(hào),團(tuán)隊(duì)可以計(jì)劃哪些功能和改進(jìn)將包含在特定版本中,以及何時(shí)發(fā)布這些版本。
- 用戶期望管理 :版本號(hào)可以用于管理用戶的期望。用戶可以根據(jù)版本號(hào)了解到軟件的新功能、改進(jìn)和修復(fù)的問(wèn)題。這有助于用戶知道他們是否需要升級(jí)或采取其他行動(dòng)。
- 軟件穩(wěn)定性 :通過(guò)良好設(shè)計(jì)的版本號(hào)系統(tǒng),可以區(qū)分主要版本、次要版本和修訂版本。這有助于用戶快速識(shí)別是否有可能引入不穩(wěn)定性的大幅更改。
常見(jiàn)生成軟件版本號(hào)的方法有哪些?
- 語(yǔ)義版本號(hào)(Semantic Versioning,SemVer) :SemVer 是一種流行的版本號(hào)方案,通常由三部分組成:主版本號(hào)、次版本號(hào)和修訂號(hào),例如 1.2.3。主版本號(hào)增加表示不兼容的變化,次版本號(hào)增加表示向后兼容的功能添加,修訂號(hào)增加表示向后兼容的錯(cuò)誤修復(fù)。
- 日期版本號(hào) :使用日期作為版本號(hào)的一部分,例如 2023.09.11,可以讓人們很容易地知道軟件的發(fā)布日期。這對(duì)于在特定日期之前或之后的版本上工作或測(cè)試很有用。
- 自定義版本號(hào) :一些團(tuán)隊(duì)和組織使用自定義版本號(hào)方案,根據(jù)他們的需求制定。這可能包括項(xiàng)目標(biāo)識(shí)符、構(gòu)建號(hào)碼、分支信息等。
- 預(yù)發(fā)布版本和元數(shù)據(jù) :有時(shí),版本號(hào)可能包括預(yù)發(fā)布版本和元數(shù)據(jù)信息,以進(jìn)一步詳細(xì)說(shuō)明軟件的狀態(tài)和特性。例如,1.2.3-beta1 表示一個(gè)預(yù)發(fā)布版本,而 1.2.3+build456 表示帶有構(gòu)建號(hào)的版本。
- 語(yǔ)言特定的版本號(hào) :某些編程語(yǔ)言和工具具有自己的版本號(hào)規(guī)范,開(kāi)發(fā)人員應(yīng)遵循這些規(guī)范,以確保與相關(guān)工具的兼容性。
在單片機(jī)中如何生成日期版本號(hào)?
先介紹一下c語(yǔ)言常見(jiàn)的兩個(gè)宏定義
在C語(yǔ)言中,有一些特殊的宏定義,用于獲取當(dāng)前編譯日期和時(shí)間等信息。以下是兩個(gè)常見(jiàn)的宏定義示例:
- DATE 宏 :
printf("編譯日期:%sn", __DATE__);
這個(gè)宏會(huì)在編譯時(shí)被替換為一個(gè)字符串,表示編譯源代碼的日期。通常,它的格式類似于"Sep 11 2023",表示月份、日期和年份。
- TIME 宏 :
printf("編譯時(shí)間:%sn", __TIME__);
這個(gè)宏會(huì)在編譯時(shí)被替換為一個(gè)字符串,表示編譯源代碼的時(shí)間。通常,它的格式類似于"12:34:56",表示小時(shí)、分鐘和秒。
這些宏可以用于在代碼中記錄編譯日期和時(shí)間,這在調(diào)試和版本管理中非常有用。
具體實(shí)現(xiàn)
#include "version.h"
#include < string.h >
#include < stdlib.h >
void Get_Compile_Date_Base(uint8_t *Year, uint8_t *Month, uint8_t *Day)
{
//Sep 11 2023
constchar *pMonth[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
constchar Date[12] = __DATE__;//取編譯日期
uint8_t i;
for(i = 0; i < 12; i++)if(memcmp(Date, pMonth[i], 3) == 0)*Month = i + 1, i = 12;
*Year = (uint8_t)atoi(Date + 9); //Date[9]為2位年份,Date[7]為完整年份
*Day = (uint8_t)atoi(Date + 4);
}
void Get_Compile_Time_Base(uint8_t *HH, uint8_t *MM, uint8_t *SS)
{
//15:40:23
constchar Time[10] = __TIME__;//取編譯時(shí)間
*HH = (uint8_t)atoi(Time + 0);
*MM = (uint8_t)atoi(Time + 3);
*SS = (uint8_t)atoi(Time + 6);
}
char g_date_buf[10];
char g_time_buf[10];
char g_version_buf[20];
char* Get_Compile_Date(void)
{
uint8_t Year, Month, Day;
Get_Compile_Date_Base(&Year, &Month, &Day);//取編譯日期
sprintf(g_date_buf, "20%02d-%02d-%02d", Year, Month, Day);//任意格式化
return g_date_buf;
}
char* Get_Compile_Time(void)
{
uint8_t HH, MM, SS;
Get_Compile_Time_Base(&HH, &MM, &SS);//取編譯時(shí)間
sprintf(g_time_buf, "%02d:%02d:%02d", HH, MM, SS);//任意格式化
return g_time_buf;
}
char* Get_Compile_Ver(void)
{
uint8_t Year, Month, Day;
uint8_t HH, MM, SS;
Get_Compile_Date_Base(&Year, &Month, &Day);//取編譯日期
Get_Compile_Time_Base(&HH, &MM, &SS);//取編譯時(shí)間
sprintf(g_version_buf, "20%02d-%02d-%02d-%02d-%02d-%02d",Year, Month, Day, HH, MM, SS);//任意格式化
return g_version_buf;
}
#ifndef _VERSION_H_
#define _VERSION_H_
#include "stm32f4xx.h"
char* Get_Compile_Date(void);
char* Get_Compile_Time(void);
char* Get_Compile_Ver(void);
#endif
實(shí)現(xiàn)效果
printf("RI QI:%srn",__DATE__);
printf("SHI JIAN:%srn",__TIME__);
printf("#############################Test#########################rn");
printf("RI QI:%srn",Get_Compile_Date());
printf("SHI JIAN:%srn",Get_Compile_Time());
printf("Soft Version:%srn",Get_Compile_Ver());

編譯時(shí)間是:2023年9月11日21點(diǎn)03分57秒(就是剛才)
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
單片機(jī)
+關(guān)注
關(guān)注
6076文章
45495瀏覽量
670297 -
軟件
+關(guān)注
關(guān)注
69文章
5332瀏覽量
91577 -
C語(yǔ)言
+關(guān)注
關(guān)注
183文章
7644瀏覽量
145579
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
怎么加上.bin文件的版本號(hào)?
描述:我想在工程名稱后添加改工程的版本,這樣生成的固件就是帶版本號(hào)的。
問(wèn)題:目前生成的bin文件后面帶不上版本號(hào),不知道為啥?如下圖所示。
發(fā)表于 06-11 07:43
請(qǐng)問(wèn)APP版本號(hào)如何設(shè)置才有效?
\") 。
但是不起作用,編譯信息看到的APP版本號(hào),以及程序里用 esp_ota_get_partition_description() 讀出的版本號(hào),都是一個(gè)串,
諸如:version: 761849b-dirty,像是隨機(jī)生成
發(fā)表于 06-26 07:40
【求助】請(qǐng)問(wèn)怎么獲取安裝程序的版本號(hào)?
在制作安裝程序時(shí),使用了自動(dòng)遞增版本號(hào),現(xiàn)在我想在程序中把這個(gè)版本號(hào)提取出來(lái),顯示在VI界面上,請(qǐng)問(wèn)有什么方法或?qū)傩钥梢垣@???找了好久沒(méi)有找
發(fā)表于 01-29 11:16
請(qǐng)問(wèn)mcfw有版本號(hào)嗎?
請(qǐng)問(wèn)mcfw有版本號(hào)嗎? ?還是這個(gè)版本號(hào)就是SDK的版本號(hào)?
還有一個(gè)問(wèn)題 ? IPNC 3.0 和 MCFW 3.0 的mcfw 是一樣的嗎?
發(fā)表于 05-31 08:48
怎么從閃存中的.mcs讀取FPGA映像版本號(hào)
.bit時(shí),能夠讀取嵌入在映像中的某種版本號(hào)/字符串非常有用。理想情況下,版本號(hào)/字符串將從VHDL一直傳送到.bit并轉(zhuǎn)發(fā)到閃存中的.mc
發(fā)表于 02-28 06:39
ARM的幾種版本號(hào)
的。3.ARM不生產(chǎn)芯片,只設(shè)計(jì)芯片并出賣版權(quán)。4.本次用的是cortex-A8處理器中三星的S5PV2105.ARM的幾種版本號(hào)(1)ARM內(nèi)核版本號(hào),如ARMv7(v是version,版本)(2)ARM SoC
發(fā)表于 12-14 08:54
如何將STM32的代碼以日期作為軟件版本號(hào)去實(shí)現(xiàn)呢
如何將STM32的代碼以日期作為軟件版本號(hào)去實(shí)現(xiàn)呢?求大神解答
發(fā)表于 12-15 06:20
如何生成單片機(jī)嵌入式軟件自動(dòng)版本號(hào)
,__TIME__代替版本信息,標(biāo)準(zhǔn)C庫(kù)都具有這兩個(gè)宏,但輸出的格式太長(zhǎng)不理想,作為一個(gè)數(shù)字強(qiáng)迫癥,只好自己想辦法在預(yù)編譯時(shí)把當(dāng)前時(shí)間處理成數(shù)字版本號(hào)。本文也是從這兩個(gè)宏下手,通過(guò)預(yù)編譯計(jì)算出數(shù)字
發(fā)表于 01-27 07:15
安裝后的應(yīng)用程序獲取版本號(hào)
想在exe程序打開(kāi)后顯示它的當(dāng)前版本,現(xiàn)在問(wèn)題是怎么獲取打包時(shí)應(yīng)用程序的版本,正常是 1.0.1 這種版本號(hào)。用屬性節(jié)點(diǎn)拉出來(lái)的版本是Labview的
發(fā)表于 05-18 10:19
求助,如何識(shí)別NUCLEO-G474RE的硬件版本號(hào)及硬件版本號(hào)對(duì)應(yīng)的原理圖版本號(hào)?
如何識(shí)別NUCLEO-G474RE的硬件版本號(hào)及硬件版本號(hào)對(duì)應(yīng)的原理圖版本號(hào)?
發(fā)表于 08-08 08:12
關(guān)于軟件、硬件版本號(hào)命名的常見(jiàn)規(guī)范
不知道大家寫(xiě)程序、畫(huà)板子時(shí),版本號(hào)是怎么命名的? ? 最常見(jiàn)的就是V1.0.0這種簡(jiǎn)單的形式命名,復(fù)雜一點(diǎn)就是帶有日期、后綴等版本信息。 ? 當(dāng)然,版本號(hào)命名規(guī)范就像代碼規(guī)范一樣,不同
微軟新系統(tǒng)開(kāi)始換版本號(hào)了 敬請(qǐng)期待
Windows10成絕唱!微軟新系統(tǒng)開(kāi)始換版本號(hào)了,windows,微軟,操作系統(tǒng),版本號(hào),
發(fā)表于 03-06 10:08
?897次閱讀
單片機(jī)嵌入式軟件自動(dòng)版本號(hào)生成方法
,__TIME__代替版本信息,標(biāo)準(zhǔn)C庫(kù)都具有這兩個(gè)宏,但輸出的格式太長(zhǎng)不理想,作為一個(gè)數(shù)字強(qiáng)迫癥,只好自己想辦法在預(yù)編譯時(shí)把當(dāng)前時(shí)間處理成數(shù)字版本號(hào)。本文也是從這兩個(gè)宏下手,通過(guò)預(yù)編譯計(jì)算出數(shù)字
發(fā)表于 12-03 11:21
?0次下載
單片機(jī)添加版本號(hào)的一些小技巧
平時(shí)我們寫(xiě)程序,通常都會(huì)備注軟件版本,那么,怎么在單片機(jī)中保存版本信息呢?
在單片機(jī)中如何生成日期版本號(hào)
評(píng)論