fopen函数matlab_MATLAB自动化——匹配map文件自动修改A2L文件

在ECU开发过程中,使用标定工具进行标定或变量监控,通常会使用基于ASAP2标准的A2L文件,目前的Embedded Coder也是支持A2L文件的生成。

如下图选项勾选后,代码生成时也生成相应的A2L文件。

c8cd48e2daac44fb3dce28b4d42a8e96.png

例如我们在模型中定义了Var_A,Var_B,Var_C,Var_X,Var_Y,Var_Z全局变量(监测量),以及Rate变量(标定量),在代码生成后,会自动生成一个A2L文件(A2L具体格式这里不进行细说,可自行度娘了解一下),部分文件内容截图如下:

c985f8d9cc954dd82e985101a60ff8ce.png

da38fc427af9518d03778b45ea51acb9.png

我们可以看到Embedded Coder生成的A2L文件中变量地址是虚拟的,都用了0x0000替代,要想使用这个A2L文件,还需要将0x0000替换成变量的实际地址。

实际应用中,我们通常会对MCU 的Flash、RAM、EEPROM等内存区域按照不同类型、不同用途进行分段划分,将变量定义在指定的内存分段内(示例中没有进行分段,变量都默认定义在RAM中,分段名默认为'common')。

我们将上述模型生成的代码在CodeWarrior进行集成,编译成功后.map文件部分截图如下:

9fe042819ecd0fddc38d17d752de35a3.png

1a4c6097b8392640ee0836791725f1a0.png

如上图,模型中涉及的每个变量都有实际的地址,我们要做的就是利用m脚本将这个.map文件与A2L进行匹配,将指定的变量地址用实际的地址进行替换(示例中仅对Var_A...这些变量的地址进行替换)。

脚本中主要涉及以下两个函数:

  • regexp 正则表达式
  • strrep 字符串替换

脚本设计思路:

1.在map文件中使用正则表达式获取所需变量的信息

对.map文件使用正则表达式,匹配查找到所需变量的分配情况,例如上述.map中,监测变量的地址分配有6段内容,可利用这6段内容进行精确匹配,获得变量的信息,包括变量名称、变量地址、变量大小等,示例代码如下:

eaf95a3a9d50675bf693f06328b52b74.png

2.在A2L文件中查找变量,替换地址

A2L文件中,每个变量都有如下一个固定格式:

(代码显示不全可左右滑动)

ECU_ADDRESS      0x0000 /* @ECU_Address@Var_A@ */

根据上述在.map中获取的变量信息,在A2L中查找对应变量,然后将上述固定格式中的虚拟地址替换成实际地址即可。(代码显示不全可左右滑动)

addrPrefix = '0x0000 /* @ECU_Address@';     
addrSuffix = '@ */';
 
expr = [addrPrefix,match_name,addrSuffix];
repr = ['0x',replace_addr,' /* @ECU_Address@',match_name,addrSuffix];
ASAP2FileString = strrep(ASAP2FileString,expr,repr);

3.重写A2L

这里用fprintf函数,直接对原A2L文件进行重写。


完整代码如下:(代码显示不全可左右滑动)

ASAP2File 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值