打印

Keil下每编译一次,怎么做到程序版本号+1

[复制链接]
楼主: aceice
手机看帖
扫描二维码
随时随地手机跟帖
21
xwj| | 2008-8-26 17:38 | 只看该作者 回帖奖励 |倒序浏览

呵呵,不开玩笑了,给你个一直在用的版本控制工具吧

Keil C51 版本号及编译计数器(Build Counter)控制 接口说明

接口程序包内文件:
1、Ver.pre:     版本控制文件
1、Ver.h:     版本控制头文件
2、VerTrans.exe:版本控制执行文件
3、VerTrans.c:     版本控制执行文件源码
5、Readme.txt:     本说明文档

使用说明:
1、VerTrans.exe:有两个参数,第一个参数是版本控制文件名称,可参照Ver.h;
   第二个参数是版本号及Build Counter位于的行号,第一行即为 1。
   版本号及Build Counter形式为“A.B.C.XXXX”,A、B及C为版本号,取值均为0~9,
   XXXX为Build Counter,取值0000~9999,该值超过9999时回到0001,且C值加1,如
   C的值超过9,则C的值回到0,B的值加1,依此类推,如果A也达到9,那就劳您手工改一改啦 :)
   注意:版本号及Build Counter的格式、位数不能改变!如有改变请自行更改VerTrans.c。
2、Ver.h:该文件中定义一些们于Code空间的字符串,一般可在主文件中包含该文件,
   然后即可引用其中的信息。
3、操作:将Ver.pre,Ver.h,VerTrans.exe复制到工程目录;
   将文件Ver.pre加入工程,Keil将提示“Get Filetype”,选“Custom file”,
   然后在Ver.pre上点右键,选择“Options ...”,在弹出对话框的最下面“Custom”中
   填“VerTrans Ver.h 5”(如Ver.h文件名或其中的版本号所在行号不同,自行更改即可),确定。
   则每次编译后编译窗口会显示“***** Build:XXXX *****”。
   当然你也可在 Options for target1... 之 Output->Run User Program ... 中来执行,如果
   没处写还可以写个批处理文件 :)
   而在主程序中自然可用 GC_Ver 或 &GC_Ver[n] 来引用其中的信息。
4、VerTrans.c:即控制文件的源代码,可作为参照,你也可以自行更改以适合您的需要。

其他说明:
1、本程序的编制及说明参照了keil的gs51.pdf,并感谢龙斑竹的提示及帮助,否则我还在用笨办法 :)
   请访问 www.c51bbs.com,会有意外收获 :)
2、本程序用于在 Keil C51 中每次编译时修改一个计数器(Build Counter)。
3、本程序在Keil C51 V6.14,进行了测试。
4、本程序无任何商业目的,对使用本程序造成的后果本人不负任何责任。
5、本程序用 Turbo C++ 3.0 编译,如要用于其他编译环境,则请自行更改代码。
6、如发现本程序有任何问题,请mail至:youth_jack@163.net,本人将不胜感激。
7、本程序允许自由转载,但转载时请勿更改。

    *** Youth ***
      2001-08-13

版本文件示例:
code char GC_CLDate[]   = __DATE__;
code char GC_CLTime[]   = __TIME__;
code char GC_MCU[]      = {"AT89C52"};
code char GC_FOSC[]     = {"11.150MHz"};
code char GC_Ver[]      = {"1.0.1.2172"};
code char GC_Type[]     = {"XWJ_ATKEY"};
code char GC_Dever[]    = {"XuWenjun"};
code char GC_OS[]       = {"Rtx-Tiny"};


GC_Ver[]会根据编译次数自动计数,程序中包含ver.h然后printf(GC_Ver);即可

相关链接:https://bbs.21ic.com/upfiles/img/200710/20071011175159399.rar

使用特权

评论回复
22
zwfj2418| | 2008-8-26 17:41 | 只看该作者

LS的强人啊

LS的 忒强了.....这都有招

使用特权

评论回复
23
aceice|  楼主 | 2008-8-26 18:01 | 只看该作者

高手,高手,膜拜

Orz

使用特权

评论回复
24
aceice|  楼主 | 2008-8-26 18:03 | 只看该作者

CX51.pdf和AX51.pdf都看了,就是没看gs51.pdf

囧。。。。。。

使用特权

评论回复
25
xwj| | 2008-8-26 18:26 | 只看该作者

呵呵,别人2001年发表的东西,那时我还是Keil的初学者

觉得好用就一直用下来了

其实知道方法自己编程也是很容易的:
编译个DOS程序,读配置文件,过滤、转换字符串后加1,重新写入文件,同时显示信息即可,相信这里谁都会写这个VerTrans.exe哦

使用特权

评论回复
26
61feng| | 2008-8-26 18:31 | 只看该作者

这个貌似合理啊!

老板很有想法啊!

使用特权

评论回复
27
aceice|  楼主 | 2008-8-26 20:09 | 只看该作者

老板很磨人......

还是要仔细看手册啊~

使用特权

评论回复
28
liandao| | 2008-8-26 20:40 | 只看该作者

这个好像不难,

猜想:
    自己用VC写一个小程序,由该程序维护C文件中特定名称数组名的那个版本号数据,在Keil设置一下,每次编译前调用该EXE文件,由它修改C文件,之后编译.呵呵,这只是猜测的,因为Keil支持编译完成后调用某个EXE(做烧写之类的),所以猜想也应该有可能编译前调用某个EXE.

使用特权

评论回复
29
strang| | 2008-8-26 21:29 | 只看该作者

支持17楼的说法!

顶!我就是这么设计的,版本好作为公司的版权,当然公司说了算,至于每次编译要加1,我觉得没有必要这么做。因为客户对这个要求不是很严的。

使用特权

评论回复
30
quan8310| | 2008-8-26 23:04 | 只看该作者

用SVN

可以用开源的SVN做为版本库管理,在keilc中调用他的脚本文件,

使用特权

评论回复
31
xhtxzxw| | 2008-8-27 01:09 | 只看该作者

嘿嘿

char * Date_Str = __DATE__;

就可以了。

Date_Str里就有一字符串(在代码编译的时候生成的啊),比如今天这会儿编译的,这个串的内容就是:"Aug 27 2008"
注意双引号不属于这个串,嘿嘿

char * Time_Str = __TIME__;

Time_Str的内容是:"01:06:58"


怎么样从这俩串里找字符形成版本信息,就很容易了。
对了,__DATE__,__TIME__前后都是俩下划线。

使用特权

评论回复
32
aceice|  楼主 | 2008-8-27 10:33 | 只看该作者

LS的日期时间到是做通了

曾今考虑过用批处理替换.c或.h里的字符串,但是调用的时候是在编译后进行处理,一直卡着。

使用特权

评论回复
33
richardvip| | 2008-8-27 10:41 | 只看该作者

ls,我试了一下怎么显示不是01:06:58之类的东西

你那里的显示结果是什么,你是不是转化了一下

使用特权

评论回复
34
gyt| | 2008-8-27 10:47 | 只看该作者

一定要自动化的话

就自己编一个程序好了

使用特权

评论回复
35
xhtxzxw| | 2008-8-27 11:19 | 只看该作者

嘿嘿

LS在KEIL里建一个小的project,然后仿一把真就可以看到了,仿的时候监视下面的变量Date_Str和Time_Str。

char * Date_Str = __DATE__;
char * Time_Str = __TIME__;
void main()
{
    for(;;);
}

使用特权

评论回复
36
古道热肠| | 2008-8-27 11:30 | 只看该作者

楼上这招管用的话,那真是高招

俺抽空试试.

使用特权

评论回复
37
xwj| | 2008-8-27 11:34 | 只看该作者

晕菜,竟然还有这么多不知道__DATE__、__TIME__的...

使用特权

评论回复
38
aweyfan| | 2008-8-27 11:43 | 只看该作者

用__DATE__等宏的缺陷是

必须重新编译包含这个宏的c文件,无论它是否修改

有些ide可以自动设置比如ads
keil也许也可以吧

使用特权

评论回复
39
aceice|  楼主 | 2008-8-27 12:46 | 只看该作者

LS的说的是,需要重新编译包含这些宏的C文件

__DATE__
__DATE2__
__TIME__
都比较好用,不过要注意对应的格式

使用特权

评论回复
40
zyok| | 2008-8-27 13:10 | 只看该作者

又学习了...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则