全部学习汇总: 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/$1 (* const )/g;
$code =~ s/P2FUNC/$1 (*fctname)/g;
$code =~ s/FUNC/$1/g;
$code =~ s/CONSTP2VAR/$1 * const/g;
$code =~ s/CONSTP2CONST/const $1 * const/g;
$code =~ s/P2CONST/const $1 */g;
$code =~ s/P2VAR/$1 */g;
open(CODE, ">$_");
print CODE "$code";
close CODE;
}
}
}
上面是我用perl实现的一个简单的小脚本,具体的脚本源文件可以从前文中的github链接中找到。针对上面的定义,这个脚本可以做一定的处理。
不过,需要注意不同版本的AUTOSAR这种编译器的抽象表达可能有差异。因此,正则表达式的处理可能得去注意一下,做一点相应的修改调整。
使用的时候,在代码根目录放这个脚本,cmd中执行perl autosar2common.pl即可。

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