blob: 091cfc4d5c3fd2946770662513709d6791d3e710 [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001#!/usr/local/bin/perl
2#use strict;
3
4my $filename;
5my $argc = @ARGV;
6if($argc < 1 || $argc > 4)
7{
8 print "Error: Please give correct arguments...\nMarginCal.pl LIS_FILE_PATH ROM_SIZE RAM_DEDUCTION (output_tag)\n";
9 exit 1;
10}
11my $filename = @ARGV[0];
12my $ROM_size = @ARGV[1];
13my $RAM_deduction = @ARGV[2];
14my $output_tag = @ARGV[3];
15#print "argc=$argc\n";
16if ($argc ==1)
17{
18 $ROM_size = 0;
19 $RAM_deduction = 0;
20}
21elsif ($argc == 2)
22{
23 $RAM_deduction = 0;
24}
25elsif ($argc == 4)
26{
27 print "\<$output_tag\>\n";
28}
29
30my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat($filename);
31open FILE, "<$filename" or die "$!";
32seek FILE, $size-30*1024*1024, 0;
33my $previous_base;
34my $previous_size;
35my $current_base;
36my $current_size;
37my $ram_margin_calculated = 0;
38$real_filename = substr($filename, rindex($filename, '\\')+1);
39print "In $real_filename:\n";
40while (<FILE>)
41{
42 my $data = $_;
43 if($ram_margin_calculated == 0 && $data =~ m/.*Execution Region (.*) .*Base: (\w+).*Size: (\w+)/)
44 {
45 $previous_base = $current_base;
46 $previous_size = $current_size;
47 $current_base = $2;
48 $current_size = $3;
49
50 if($1 =~ /CACHED_DUMMY_END/)
51 {
52 #print "previous_base: $previous_base\n";
53 #print "previous_size: $previous_size\n";
54 #print "current_base: $current_base\n";
55 #print "current_size: $current_size\n";
56 my $ret = (hex $current_base) - (hex $previous_base) - (hex $previous_size);
57 $margin = $ret - ($RAM_deduction*1024*1024);
58 my $margin_inK = sprintf("%0.2f", $margin/1024);
59 my $margin_inM = sprintf("%0.2f", $margin/1024/1024);
60 print "RAM Margin: $margin($margin_inK KB/ $margin_inM MB)\n";
61 $ram_margin_calculated = 1;
62 }
63 }
64 elsif($ram_margin_calculated == 1 && $data =~ m/.*Total ROM Size \(Code \+ RO Data \+ RW Data\) *(\d+)/)
65 {
66 my $ret = $1;
67 $ret = ($ROM_size*1024*1024) - $ret;
68 my $ret_inK = sprintf("%0.2f", $ret/1024);
69 my $ret_inM = sprintf("%0.2f", $ret/1024/1024);
70 my $rom_usage = $1;
71 my $rom_usage_inK = sprintf("%0.2f", $rom_usage/1024);
72 my $rom_usage_inM = sprintf("%0.2f", $rom_usage/1024/1024);
73 print "ROM Usage: $rom_usage($rom_usage_inK KB/ $rom_usage_inM MB)\n";
74 if($ROM_size >0)
75 {
76 print "ROM Margin: $ret($ret_inK KB/ $ret_inM MB)\n";
77 }
78 Last;
79 }
80}
81close FILE;
82print "Done!\n";