rjw | 6c1fd8f | 2022-11-30 14:33:01 +0800 | [diff] [blame] | 1 | #!/usr/local/bin/perl
|
| 2 | #use strict;
|
| 3 |
|
| 4 | my $filename;
|
| 5 | my $argc = @ARGV;
|
| 6 | if($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 | }
|
| 11 | my $filename = @ARGV[0];
|
| 12 | my $ROM_size = @ARGV[1];
|
| 13 | my $RAM_deduction = @ARGV[2];
|
| 14 | my $output_tag = @ARGV[3];
|
| 15 | #print "argc=$argc\n";
|
| 16 | if ($argc ==1)
|
| 17 | {
|
| 18 | $ROM_size = 0;
|
| 19 | $RAM_deduction = 0;
|
| 20 | }
|
| 21 | elsif ($argc == 2)
|
| 22 | {
|
| 23 | $RAM_deduction = 0;
|
| 24 | }
|
| 25 | elsif ($argc == 4)
|
| 26 | {
|
| 27 | print "\<$output_tag\>\n";
|
| 28 | }
|
| 29 |
|
| 30 | my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat($filename);
|
| 31 | open FILE, "<$filename" or die "$!";
|
| 32 | seek FILE, $size-30*1024*1024, 0;
|
| 33 | my $previous_base;
|
| 34 | my $previous_size;
|
| 35 | my $current_base;
|
| 36 | my $current_size;
|
| 37 | my $ram_margin_calculated = 0;
|
| 38 | $real_filename = substr($filename, rindex($filename, '\\')+1);
|
| 39 | print "In $real_filename:\n";
|
| 40 | while (<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 | }
|
| 81 | close FILE;
|
| 82 | print "Done!\n"; |