getkeyname 实现虚拟键与ascii的转换_MATLAB造轮子3_软件版本管理及批量转换1_(脚本方式)...

b1455c606c5eecba0b55a1e028f7c520.png

0 前言

在我做软件集成工作的时候,软件团队里,每个人会负责一部分模块的功能。经过测试后,各模块的软件代码,会统一由我汇总集成,并对外发布软件。 因此,我除了软件集成之外,还要进行版本的变更及管理,每次的变更,都要写明变更点等。 不知道其他的软件集成工程师,是如何管理各版本的,我是通过excl表格,写下每个软件版本的版本号,变更日期,变更内容等,来统一管理。

bbf4efaafaf3780d7b5a1d264de876a2.png

当某个版本的软件测试有问题时,我会先顺着版本管理的文件,找到对应版本号及文件名称,看看软件的变更内容,然后再找到有问题的软件版本,针对变更内容,去排查问题。 排查完问题后,我也会把相关的问题记录到对应版本上。 如果只是管理一个项目的软件,那可能还好。但随着项目增多,而且每个项目又要区分很多的测试版本,分别用于不同的测试项目,这样管理起来显然有些吃力。 而且,每一版软件的版本号,还需要转换一下编码格式,比如将ASCII码值转换为16进制值,写到软件代码里。 今天,我就分享一个,在管理软件版本号时,自己写的一个自动化脚本:软件版本管理及批量转换。

1 问题来源

在汽车上,每个ECU控制器,应该都需要能读出软硬件版本号等信息,一般这些信息都是通过字母加数字的形式显示的。 所以,每个ECU控制器,在进行软件版本号的管理时,需要将字母和数字组合的版本号,转换为十六进制数,存到一个DID里,然后通过UDS协议,就能读取到对应的版本号了。 之前的常规操作是,找个ASCII码表,寻找A-Z字母和1-9数字的对应16进制数,然后一个个写入到DID里。

4a1f727f86bb8fa8285391700c19e864.png

如果是版本号少的时候,或者版本号不经常更改的时候还好,我还可以忍受,最多也就是偶尔修改。 但随着项目增多,还有各种测试版本的软件增多,为了区分不同项目和不同功能的软件,我需要设置不同的版本号。但让我一个个去对照ASCII码,我的内心是拒绝+反抗的,太浪费时间了…….

21dd976c23dcf5393da13d5204d0fd3e.png

2 问题分析

随后,我就想到,我的软件版本号,是存在EXCL文件里统一管理的,是否有函数,可以自动完成字母和数字转换为十六进制数的操作? 可是上网找了一圈没找到EXCL和MATLAB的函数,最后没办法,只能自己来写这个函数了。 很早之前,项目给我的代码里,软件版本号的值是直接写在某个文件的一个数组里定义的。

7ba235767da9278dce30f5fa86efa5a1.png

要改个版本号,需要一路找到那个文件,去改对应的数值。如果只是小改动还好,比如软件升级一版,AS001改为AS002,很简单,只要修改1的ASCII码值,将0x31改为0x32就可以了。 但如果要在这版软件上,修改为一个测试版本,而且版本号要体现测试版本的内容等,那可能需要改动不止一个地方。

d48ed965fe23a097b69f970c7e8d115d.png

还有,当你要管理这么多版本的软件时,你会一个个手动改对应的版本号? 当我慢慢使用MATLAB越多,我就越想试试,使用MATLAB来实现一些自动化的小功能,来替换重复性的操作。

3 具体实现

1. 第一步,先修改定义版本号的DID代码。 在一个统一的参数定义的h文件中,对版本号设置一个对应的宏定义,这样平时就不用一层层的去找版本号定义的那个文件了,简单升级一版软件,改个参数也会方便很多。

4a1a56835e95d183b59730d3bb2b0a1a.png

98cd7e35be69547e5fbeec82696dbc2e.png

2. 第二步,实现字母和数字转换为16进制数的功能。 具体的实现思路其实很简单,主要用到了以下几个函数,通过注释也能大概知道这些函数的意思了。 另外,之前的文章也用到过这几个函数,有不明白的,可以一起对照参考下:MATLAB造轮子1_Str2Hex(脚本方式)

5478580ec3d142f58a1248fe7f47c108.png

但这仅仅能得到对应字母和数字的16进制值,后面还得我们自己手动复制粘贴,然后再加些内容,和我们想像的自动批量处理,还是有点差别。如果直接能生成宏定义的文件里那种格式,那就方便很多了。 其实很简单,之前的文章也有提到过,可以通过strcat()函数来实现,按照自己的需求,在16进制数前加上0x,然后它前面再加上swver01, 还有#define等等。 这里,有个地方要注意下,就是需要对swver01和swver10做个区分,在循环的时候,1-9是一位数,10开始就变为两位数了。

77236a349e87434dd903ccb045be2608.png

647ca02eff52fe3084db53e3437c105e.png

3. 第三步,将得到的字符串循环处理写入到xls文件中。

188ccb3711b27892514472ac39343bdf.png

但这部分代码,一次只能处理一个版本号。 如果想批量处理excl文件里管理的多个版本号,可以将上面这个功能封装为一个函数,然后循环读取excl里的所有版本号和相关备注,再循环写入到excl对应的sheet中。 最终的效果如下:只要选择对应的版本号内容,从excl里直接复制到你的h文件里即可。

c2ba9af18e74c98bea1ea29c3e769f9d.png

4 总结

总体上,实现"软件版本管理及批量转换"的这个功能,并不复杂,上面的图片中也有了大部分的相关代码及注释。

如果对此功能有兴趣的朋友,可以试着自己写写代码实现一下,这样对自己的编程能力也有提高,可能有些写的比我还好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值