你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

获取编译时间作为版本号

[复制链接]
dvacos 发布时间:2023-12-24 23:43

相信各位在开发的时候都有点烦代码的版本号要怎么命名,按照什么规律去命名,下面给大家介绍一下两个宏,可以获取每次编译时的年月日时分秒,非常好用!

` DATA TIME //注意是双下划线

这是两个编译器宏定义,keil里有的(我目前只用Keil验证了)。 用途:用于自动获取编译器编译时的当前时间。 –DATE– ------用于获取当前日期—格式— Jul 03 2020 –TIME– ------ 用于获取当前时间—格式—15:52:54 但是以上的格式不太符合我的习惯,所以我必须给他整一下! 我想要的是“年月日时分秒”的格式,所以有了以下的代码。

void get_ver_time(void)

{

    u8 ver_len=0;

    u8 cnt=0;

    char time[10]=__TIME__;    

    char ver_time[10];        

    #define YEAR    ((( (__DATE__ [7 ] - '0') * 10  \

                      + (__DATE__ [8 ] - '0')) * 10 \

                      + (__DATE__ [9 ] - '0')) * 10 \

                      + (__DATE__ [10] - '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)



    #define DAY     ( (__DATE__ [4] == ' ' ? 0 : __DATE__ [4] - '0') * 10 \

                    + (__DATE__ [5] - '0'))

    for(int i=0; time[i]!=0; i++)

    {

      if(isdigit(time[i]))

      {

        ver_time[cnt]=time[i];

        cnt++;          

      }

    }

    ver_time[cnt++]=0;

    ver_len=sprintf(str_ver_time,"V1.0_%d_%02d_%02d_%s",YEAR,MONTH,DAY,ver_time);
}

获取到 DATE ------用于获取当前日期—格式— Jul 03 2020 年: 是_ DATE_的7-10位,直接用数组取取值后,取出来的ASCII 码,直接用来显示会有点问题,所以要减去0x30,也就是'0',

月份:需要取判断字母,来确定是几月份,具体就是按照每个月份的简称所组成的字母的差异来确定是几月。

日:和年类似,需要进一步第四位是不是空格 ,‘ ’,0x20(因为1-9号是1位数),我们需要补零。

时分秒:使用了isdigit 函数来过滤掉数据之间的空格!

最后打印出来的是,例子:2023 12 24 11 32 00 的纯数值。

注意获取编译时间需要每一次都编译到才会更新,但是目前的的编译都是增量编译,没有改动的地方不会编译的,所以我们需要设置一下,这个函数所在的文件才可以确保每一次都可以获取到最新的编译时间!!

方法是:

121212.png

点亮 总是编译即可!

121212.png
收藏 评论1 发布时间:2023-12-24 23:43

举报

1个回答
onebyte 回答时间:2023-12-29 08:39:47

原来还可以这样做,受教了

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版