IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> MDK中利用宏定义__DATE__和__TIME__设置产品的代码固件版本 -> 正文阅读

[C++知识库]MDK中利用宏定义__DATE__和__TIME__设置产品的代码固件版本


前言

STM32开发中,利用宏定义的__DATE__和__TIME__设置产品的代码固件版本:
为了方便在编译代码的时候,自动生成代码固件的版本号,所以我们需要用到__DATE__和__TIME__这两个宏获取记录编译代码时的时间。


提示:以下是本篇文章正文内容,下面案例可供参考

一、__DATE__和__TIME__是什么?

这两个宏在编译的时候会记录当前的编译日期时间,如:Mar 16 2011 18:10:14,而无论以后运行多少次这个时间都不会改变。如果重新编译的话,这个时间又会发生改变。在使用过程中,直接调用宏即可记录当前编译时间。这两个宏的结果都是字符串类型。

const char* time = TIME " "DATE ;

则time 值为该源文件最近一次编译的时间和日期,如18:10:14 Mar 16 2011
如果去掉中间的空格字符 TIME DATE 则为18:10:14Mar 16 2011

二、使用步骤

1.引入库

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.参考代码

代码如下(示例):

//DATE得到的月数,__DATA__[0-2]表示月的缩写
/*                   012
Jan ------ 1 -------  an
Feb ------ 2 -------   b
Mar ------ 3 ------- M r
Apr ------ 4 -------   r
may ------ 5 -------   y
Jun ------ 6 -------   n
Jul ------ 7 -------   l
Aug ------ 8 -------   g
Sept------ 9 -------   p
Oct ------ 10-------   t
Nov ------ 11-------   v 
Dec ------ 12-------   c

*/
// 将日期转换为uint类型。
// ((((2 * 10) + 0) * 10 + 2) * 10) + 1;  先加再乘。10进制,加上1位,就*10 。
#define YEAR 		(((	(__DATE__ [7 ] - '0') * 10  \
					  + (__DATE__ [8 ] - '0')) * 10 \
					  + (__DATE__ [9 ] - '0')) * 10 \
					  + (__DATE__ [10] - '0'))


// 判断月的缩写的第3位,如果第3位相同的,则判断第1位或者第0位
#define MONTH 		( __DATE__ [2] == 'n' ? (__DATE__ [1] == 'a' ? 1 : 6) \
					: __DATE__ [2] == 'b' ? 2 \
					: __DATE__ [2] == 'r' ? (__DATE__ [0] == 'M' ? 3 : 4) \
					: __DATE__ [2] == 'y' ? 5	\
					: __DATE__ [2] == 'n' ? 6	\
					: __DATE__ [2] == 'l' ? 7	\
					: __DATE__ [2] == 'g' ? 8	\
					: __DATE__ [2] == 'p' ? 9	\
					: __DATE__ [2] == 't' ? 10	\
					: __DATE__ [2] == 'v' ? 11 : 12)

// 求取日期:__DATE__ [4]十位,__DATE__ [5]个位。十位为空,则直接用__DATE__ [5]-'0'表示个位。否则十位*10 + 个位。
#define DAY 		( (__DATE__ [4] == ' ' ? 0 : __DATE__ [4] - '0') * 10 \
					+ (__DATE__ [5] - '0')) 

 sprintf ( FirmWare,   "%d%02d%02d",  YEAR, MONTH, DAY );       // 利用__DATE__得到的时间,在编译的时候会改变,其余时间都不会改变,利于对产品打上版本编号。


总结

在设置固件代码版本号的时候,可以用“品牌代码+固件版本号+时间”的方式设置。

类似参考文章:
1、C语言之自定义__DATE__与__TIME__
2、C语言中 将编译时间转换为int类型作为时间戳 DATE TIME 转INT类型
3、C语言中两个实用的宏定义__DATE__和__TIME__
4、C语言获取系统的实时时间(stm32中常用到)DATE__和__TIME
5、STM32 用__DATE__和__TIME__获取keil工程编译时间,关联软件版本信息
6、利用KEIL获取文件编译时间
7、关于c 语言的__TIME__ __DATE__宏定义
8、编译时获得系统的日期和时间

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-07 21:43:07  更:2021-08-07 21:43:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/9 4:39:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码