📄 rom_ram.pl
字号:
#!/usr/bin/perl
#rom_ram.pl
use strict;
my $source_file = "Findfiles.txt";
my $code_file = "2062CC_Mmi_Extra-code_size-041109.txt";
my $resource_file = "2062CC_Mmi_AresGame-code_size-041109.txt";
my $map_file = "2062CC_C166_mmi_GPRSEG3_DEBUG.map";
my @classes = parsesourcefile($source_file);
my (%rom_size, %ram_size);
calculate(\@classes, $code_file, \%rom_size, \%ram_size);
calculate(\@classes, $resource_file, \%rom_size, \%ram_size);
get_size_map(\@classes,$map_file,"CHUGE", \%rom_size, \%ram_size);
get_size_map(\@classes,$map_file,"CSHUGE", \%rom_size, \%ram_size);
check_error(\@classes, \%rom_size, \%ram_size);
output_result(\@classes, \%rom_size, \%ram_size);
sub parsesourcefile{
my ($source_file) = @_;
open FILE,"<".$source_file;
my @lines = <FILE>;
close FILE;
my %classes;
foreach (@lines) {
if(~m/(\w+)\.[hc]pp/){
$classes{$1} = 1;
}
}
return keys %classes;
}
sub calculate{
my ($ref_classes, $size_file, $ref_rom_size, $ref_ram_size) = @_;
open FILE,"<".$size_file;
my @lines = <FILE>;
close FILE;
shift @lines;
shift @lines;
shift @lines;
foreach (@lines) {
my @parts = split(/\t/,$_);
if($parts[0] =~ m/(\w+)_IC$/){
my $class = $1;
foreach (@$ref_classes) {
if(uc $_ eq $class){
$$ref_rom_size{$_} += $parts[1];
$$ref_rom_size{$_} += $parts[2];
$$ref_ram_size{$_} += $parts[3];
$$ref_ram_size{$_} += $parts[4];
}
}
}
}
}
sub get_size_map{
my ($ref_classes, $map_file, $type, $ref_rom_size, $ref_ram_size) = @_;
my $flag;
my @data;
open FILE,"<".$map_file;
while(<FILE>){
if($_ =~ m/^$type/){
$flag = "ram";
}
if($_ =~ m/Total class size:/){
$flag = "";
}
if($_ =~ m/^($type)ROM/){
$flag = "rom";
}
if($flag eq "ram"){
parse_size($_, $ref_classes, $ref_ram_size);
}
elsif ($flag eq "rom"){
parse_size($_, $ref_classes, $ref_rom_size);
}
}
close FILE;
}
sub parse_size{
my ($content, $ref_classes, $ref_size) = @_;
my @parts = split(/\s+/,$content);
if($parts[1] =~ m/(\w+)_\d_\w\w$/){
my $class = $1;
foreach (@$ref_classes) {
if(uc $_ eq $class){
$$ref_size{$_} += $parts[2];
}
}
}
}
sub check_error{
my ($ref_classes, $ref_rom_size, $ref_ram_size) = @_;
my @errors;
foreach (@$ref_classes) {
next if(exists $$ref_rom_size{$_} || exists $$ref_ram_size{$_});
push @errors,$_;
}
if($#errors != -1){
print "errors found!\n";
open FILE,">"."error_report.txt";
foreach (@errors) {
print FILE $_,"\n";
}
close FILE;
}
}
sub output_result{
my ($ref_classes, $ref_rom_size, $ref_ram_size) = @_;
open FILE,">"."result.txt";
print FILE "Class","\t","rom_size","\t","ram_size","\n";
my ($rom_size, $ram_size);
foreach (@$ref_classes) {
next if(!(exists $$ref_rom_size{$_} || exists $$ref_ram_size{$_}));
print FILE $_, "\t\t", $$ref_rom_size{$_}, "\t\t", $$ref_ram_size{$_}, "\n";
$rom_size += $$ref_rom_size{$_};
$ram_size += $$ref_ram_size{$_};
}
print FILE "\n\nTotal result:", "\t\t", $rom_size, "\t\t", $ram_size, "\t\t", $ram_size + $rom_size;
close FILE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -