当前位置:网站首页>1285_把AUTOSAR函数以及变量等定义的宏用脚本展开以提高可读性
1285_把AUTOSAR函数以及变量等定义的宏用脚本展开以提高可读性
2022-06-30 06:51:00 【grey_csdn】
全部学习汇总: https://github.com/GreyZhang/hack_autosar
AUTOSAR的代码去阅读的时候,习惯了非AUTOSAR代码风格的人可能会觉得不适应。其中很大一个原因可能是编译器部分要求的一部分抽象处理导致。

比如,上面就是一部分定义的典型代表。
其实,我觉得如果我们所用的代码阅读工具或者代码编写工具本身的语义分析很强或者很弱,这些都不是什么问题。如果强到了可以为我们自动处理全部,其实我们今天的问题就解决了。而语义分析弱的,甚至语法提示都不够的,可能会因此而获取更多的信息辅助代码的理解。
我相信,很多人纵然不用Source Insight写代码也会用Source Insight看代码。但是很遗憾的是,很多时候这样的解析会把Source Insight难住。而且,有时候面对这样的一些定义信息有时候我们的脑子得去不断做翻译,毕竟跟直接了当的代码表达方式有一点不同。
我在做代码调试的时候有时候也会因为这部分糊涂,我做的一个简单的处理是直接把这部分简化一下保证其语义不变。而且,改完之后可以通过编译对比一下hex是否发生了变化。自然,我们希望我们修改后的呈现形式不会导致代码的语义发生变化,也就是hex不变。
类似的展开其实也容易,我们只需要做一个正则表达式的匹配处理就能够实现语义的表达。
#!/usr/bin/perl -w
use File::Find;
find(\&process_c_code_file, '.');
sub process_c_code_file
{
if(/\.c$|\.h$/)
{
if($_ ne "Compiler.h")
{
open(CODE, "<$_");
my @code = ;
close CODE;
my $code = join '',@code;
$code =~ s/CONSTP2FUNC\((\w+)\s*,\s*\w+\)/$1 (* const )/g;
$code =~ s/P2FUNC\((\w+)\s*,\s*\w+\)/$1 (*fctname)/g;
$code =~ s/FUNC\((\w+)\s*,\s*\w+\)/$1/g;
$code =~ s/CONSTP2VAR\((\w+)\s*,\s*\w+,\s*\w+\)/$1 * const/g;
$code =~ s/CONSTP2CONST\((\w+)\s*,\s*\w+,\s*\w+\)/const $1 * const/g;
$code =~ s/P2CONST\((\w+)\s*,\s*\w+,\s*\w+\)/const $1 */g;
$code =~ s/P2VAR\((\w+)\s*,\s*\w+,\s*\w+\)/$1 */g;
open(CODE, ">$_");
print CODE "$code";
close CODE;
}
}
}
上面是我用perl实现的一个简单的小脚本,具体的脚本源文件可以从前文中的github链接中找到。针对上面的定义,这个脚本可以做一定的处理。
不过,需要注意不同版本的AUTOSAR这种编译器的抽象表达可能有差异。因此,正则表达式的处理可能得去注意一下,做一点相应的修改调整。
使用的时候,在代码根目录放这个脚本,cmd中执行perl autosar2common.pl即可。

以上是修改的效果,应该有一定的可读性的改善。
简单随手写的,考虑可能不周到,如果有bug欢迎大家发布修复版本!
边栏推荐
猜你喜欢

Bat usage details 2

MySQL Optimization: from more than ten seconds to 300 milliseconds

1.3 - 码制

tomorrow! "Mobile cloud Cup" competition air publicity will start!

Google Earth Engine(GEE)——墨累全球潮汐湿地变化 v1 (1999-2019) 数据集

1.9 - Cache

RT thread Kernel Implementation (II): critical area, object container

Numpy中的四个小技巧

RT thread migration to s5p4418 (III): static memory pool management

1.4 - fixed and floating point numbers
随机推荐
华泰炒股安全吗?我想网上开户。
tomorrow! "Mobile cloud Cup" competition air publicity will start!
gazebo/set_ model_ State topic driving UAV model through posture
memcpy内存重叠的解决
【Hot100】11. 盛最多水的容器
1.5 - logical operation
1.2(补充)
First line of code (Third Edition) learning notes
KEIL - 下载调试出现“TRACE HW not present”
File transfer protocol, FTP file sharing server
SOC项目AHB_SD_HOST控制器设计
C # - C # process and convert pixeldata of CT images with fo DICOM
1.8 - 多级存储
【Hot100】15. 三数之和
经纬恒润再次荣获PACCAR集团 10PPM 质量奖
Servlet principle
1.6 - CPU组成
Pay attention to this live broadcast and learn about the path to achieve the dual carbon goal of the energy industry
Problems and solutions of creating topic messages in ROS
Cmake post makefile:32: * * * missing separator Stop.