MDK中利用宏定义__DATE__和__TIME__设置产品的代码固件版本
文章目录
- 前言
- 一、__DATE__和__TIME__是什么?
- 二、使用步骤
- 1.引入库
- 2.参考代码
- 总结
前言
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、编译时获得系统的日期和时间
MDK中利用宏定义__DATE__和__TIME__设置产品的代码固件版本相关推荐
- 在Excel中利用宏定义实现MD5加密和批量加密
想试试excel表格的批量插入,在网上找了一些方法,结合方法自己总结了下! 分为四步 1.下载宏文件[md5宏] 下载宏地址:https://pan.baidu.com/s/13YG ...
- [C语言] 在单片机的嵌入式开发中使用宏定义一键开关日志输出/打log调试
前言 在编写项目时,我们通常需要日志输出来帮助我们追踪程序执行的内容,以便在出现BUG时较为方便的复现,并在调试完成后快速的关闭过于详细的LOG输出,避免干扰使用中的体验,在函数中一个一个的增加pri ...
- c#利用宏定义调试代码
#define 使用 #define 来定义符号. 将符号用作传递给 #if 指令的表达式时,该表达式的计算结果为 true,如以下示例所示: #define DEBUG 说明 #define 指令不 ...
- C++中的宏定义详解
转载自:C++中的宏定义 和 C++宏定义详解 目录 一.#define解析 1 #define命令剖析 1.1 #define的概念 1.2 宏替换发生的时机 1.3 ANSI标准说明了五个预定 ...
- Linux内核源码中使用宏定义的若干技巧
在C中,宏定义的概念虽然简单,但是真要用好却并不那么容易,下面从Linux源码中抽取一些宏定义的使用方法,希望能从中得到点启发: 1. 类型检查 比如module_init的宏定义: 点击(此处)折叠 ...
- NASM汇编程序中的宏定义
NASM汇编程序中的宏定义 格式如下: %macro 宏名 参数名列表 宏体 %endmacro 如: %macro Descriptor 3 dw %2 & 0FFFFh dw %1 &am ...
- c语言 字符串数组末尾,C语言中,利用宏定义一个字符串和字符数组定义的字符串其末尾都会自动添加\0字符...
利用宏定义一个字符串#define MYPHONE "AT+CMGS" 字符数组的方式来定义一个字符串unsigned char SMS[]="HELLO, WELCOM ...
- Makefile中用宏定义进行条件编译(gcc -D)/在Makefile中进行宏定义-D
在源代码里面如果这样是定义的: #ifdef MACRONAME //可选代码 #endif 那在makefile里面 gcc -D MACRONAME=MACRODEF 或者 gcc ...
- 关于gcc扩展中的宏定义中用 # 和 ##
关于gcc扩展中的宏定义中用 "#" 和 "##" 今天测试了宏定义中的 "#" 和 "##" 的区别. 结果如下: & ...
最新文章
- python array与 list区别
- vue商品列表滚动效果_如何处理前端超长列表
- “阿姨我不想努力了”,阿姨的回复让我重燃斗志!
- python+OpenCv+dlib实现人脸68个关键点检测
- 17年9月计算机二级试题,9月计算机二级MSOffice练习试题
- 学习OpenResty编程
- openssl NDK 交叉编译
- 关于aop:pointcut的expression配制说明及JoinPoint
- Please enable make sure that the ntop html/ directory is properly installed
- 2017.9.22 middle 失败总结
- c# Linq实现 获得某一个路径下所有文件的名(不含扩展名)
- 红帽 与 CentOS 之间的恩怨情仇
- SourceTree的使用
- 华为radius服务器配置
- EasyGBS对GB35114的支持
- Terrasolid 安装教程
- cst和ansys_CST、HFSS、ADS几款电磁仿真软件区别对比
- linux局域网ip查询软件,局域网IP查询
- 1日人民币对美元汇率中间价下调56个基点
- NETDMIS5.0端面圆跳动2023