0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在单片机中如何生成日期版本号

CHANBAEK ? 来源:小李的创客实验室 ? 作者: 初出茅庐的小李 ? 2023-09-14 11:14 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

为什么要软件版本号呢?

生成软件版本号是在软件开发和维护过程中非常重要的一项任务,它有很多意义和好处,同时也有多种常见的方法。

  1. 标识和追踪 :软件版本号是唯一的标识符,用于区分不同版本的软件。这有助于开发人员和用户识别和追踪软件的不同发布版本。当出现问题时,可以更容易地确定特定版本中的错误或改进。
  2. 沟通和文档 :版本号提供了一种简单而清晰的方式来与团队成员、用户和其他利益相关者进行沟通。通过版本号,人们可以明确了解到底是哪个版本的软件正在讨论,从而更容易地协作和解决问题。
  3. 发布计划 :版本号可以用于制定和执行软件的发布计划。通过设定版本号,团队可以计划哪些功能和改进将包含在特定版本中,以及何时发布这些版本。
  4. 用户期望管理 :版本号可以用于管理用户的期望。用户可以根据版本号了解到软件的新功能、改进和修复的问题。这有助于用户知道他们是否需要升级或采取其他行动。
  5. 软件稳定性 :通过良好设计的版本号系统,可以区分主要版本、次要版本和修订版本。这有助于用户快速识别是否有可能引入不稳定性的大幅更改。

常见生成软件版本号的方法有哪些?

  1. 语义版本号(Semantic Versioning,SemVer) :SemVer 是一种流行的版本号方案,通常由三部分组成:主版本号、次版本号和修订号,例如 1.2.3。主版本号增加表示不兼容的变化,次版本号增加表示向后兼容的功能添加,修订号增加表示向后兼容的错误修复。
  2. 日期版本号 :使用日期作为版本号的一部分,例如 2023.09.11,可以让人们很容易地知道软件的发布日期。这对于在特定日期之前或之后的版本上工作或测试很有用。
  3. 自定义版本号 :一些团队和组织使用自定义版本号方案,根据他们的需求制定。这可能包括项目标识符、构建号码、分支信息等。
  4. 预发布版本和元数据 :有时,版本号可能包括预发布版本和元数据信息,以进一步详细说明软件的状态和特性。例如,1.2.3-beta1 表示一个预发布版本,而 1.2.3+build456 表示带有构建号的版本。
  5. 语言特定的版本号 :某些编程语言和工具具有自己的版本号规范,开发人员应遵循这些规范,以确保与相关工具的兼容性。

单片机中如何生成日期版本号?

先介绍一下c语言常见的两个宏定义

在C语言中,有一些特殊的宏定义,用于获取当前编译日期和时间等信息。以下是两个常见的宏定义示例:

  1. DATE
printf("编译日期:%sn", __DATE__);

这个宏会在编译时被替换为一个字符串,表示编译源代码的日期。通常,它的格式类似于"Sep 11 2023",表示月份、日期和年份。

  1. TIME
printf("编译时间:%sn", __TIME__);

这个宏会在编译时被替换为一个字符串,表示编译源代码的时间。通常,它的格式类似于"12:34:56",表示小时、分钟和秒。

这些宏可以用于在代码中记录编译日期和时间,这在调试和版本管理中非常有用。

具体实现

#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__;//取编译时间
	*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);//取编译时间
	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);//取编译时间
	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

实现效果

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());

图片

编译时间是:2023年9月11日21点03分57秒(就是刚才)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6069

    文章

    45108

    浏览量

    654284
  • 软件
    +关注

    关注

    69

    文章

    5179

    浏览量

    89641
  • C语言
    +关注

    关注

    181

    文章

    7633

    浏览量

    142596
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    怎么加上.bin文件的版本号

    描述:我想在工程名称后添加改工程的版本,这样生成的固件就是带版本号的。 问题:目前生成的bin文件后面带不上版本号,不知道为啥?如下图所示。
    发表于 06-11 07:43

    请问APP版本号如何设置才有效?

    \") 。 但是不起作用,编译信息看到的APP版本号,以及程序里用 esp_ota_get_partition_description() 读出的版本号,都是一个串, 诸如:version: 761849b-dirty,像是随机生成
    发表于 06-26 07:40

    【求助】请问怎么获取安装程序的版本号

    制作安装程序时,使用了自动递增版本号,现在我想在程序把这个版本号提取出来,显示VI界面上,请问有什么方法或属性可以获取?找了好久没有找
    发表于 01-29 11:16

    请问mcfw有版本号吗?

    请问mcfw有版本号吗? ?还是这个版本号就是SDK的版本号? 还有一个问题 ? IPNC 3.0 和 MCFW 3.0 的mcfw 是一样的吗?
    发表于 05-31 08:48

    怎么从闪存的.mcs读取FPGA映像版本号

    .bit时,能够读取嵌入映像的某种版本号/字符串非常有用。理想情况下,版本号/字符串将从VHDL一直传送到.bit并转发到闪存的.mc
    发表于 02-28 06:39

    ARM的几种版本号

    的。3.ARM不生产芯片,只设计芯片并出卖版权。4.本次用的是cortex-A8处理器中三星的S5PV2105.ARM的几种版本号(1)ARM内核版本号,如ARMv7(v是version,版本)(2)ARM SoC
    发表于 12-14 08:54

    如何将STM32的代码以日期作为软件版本号去实现呢

    如何将STM32的代码以日期作为软件版本号去实现呢?求大神解答
    发表于 12-15 06:20

    如何生成单片机嵌入式软件自动版本号

    ,__TIME__代替版本信息,标准C库都具有这两个宏,但输出的格式太长不理想,作为一个数字强迫症,只好自己想办法预编译时把当前时间处理成数字版本号。本文也是从这两个宏下手,通过预编译计算出数字
    发表于 01-27 07:15

    安装后的应用程序获取版本号

    想在exe程序打开后显示它的当前版本,现在问题是怎么获取打包时应用程序的版本,正常是 1.0.1 这种版本号。用属性节点拉出来的版本是Labview的
    发表于 05-18 10:19

    求助,如何识别NUCLEO-G474RE的硬件版本号及硬件版本号对应的原理图版本号

    如何识别NUCLEO-G474RE的硬件版本号及硬件版本号对应的原理图版本号
    发表于 08-08 08:12

    ESP32怎么读取固件版本号

    ESP32怎么读取固件版本号
    发表于 10-09 06:47

    关于软件、硬件版本号命名的常见规范

    不知道大家写程序、画板子时,版本号是怎么命名的? ? 最常见的就是V1.0.0这种简单的形式命名,复杂一点就是带有日期、后缀等版本信息。 ? 当然,版本号命名规范就像代码规范一样,不同
    的头像 发表于 12-31 10:04 ?5585次阅读

    微软新系统开始换版本号了 敬请期待

    Windows10成绝唱!微软新系统开始换版本号了,windows,微软,操作系统,版本号,
    发表于 03-06 10:08 ?757次阅读

    单片机嵌入式软件自动版本号生成方法

    ,__TIME__代替版本信息,标准C库都具有这两个宏,但输出的格式太长不理想,作为一个数字强迫症,只好自己想办法预编译时把当前时间处理成数字版本号。本文也是从这两个宏下手,通过预编译计算出数字
    发表于 12-03 11:21 ?0次下载
    <b class='flag-5'>单片机</b>嵌入式软件自动<b class='flag-5'>版本号</b><b class='flag-5'>生成</b>方法

    单片机添加版本号的一些小技巧

    平时我们写程序,通常都会备注软件版本,那么,怎么单片机中保存版本信息呢?
    的头像 发表于 04-12 09:16 ?1298次阅读