⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rom_ram.pl

📁 根据c++代码
💻 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 + -