2赞

10回答

1收藏

[STM8开发小工具]使STVD像Keil一样显示代码大小

 

STMCU STMCU 24060 人阅读 | 10 人回复 | 2013-07-09


先上菜:点击此处下载
size.rar (2.34 KB, 下载次数: 766)



再上吃法:


1、把解开后的size.exe复制到COSMIC\CXSTM8文件夹,就是你的COSMIC编译工具里有cpstm8.exe的那个文件夹。
2、在SVTD的Project->settings中打开Post-Build选项卡,在commands的最后一行加入:size $(OutputPath)$(TargetSName).map
3、保存返回,编译试试,最后会出现如:Program Size: Code=12470 Eeprom=0 ZeroPage=227 Ram=180 的结果。


思路:


打开map文件,统计各段的长度,然后输出。


主要代码:
  1. static void Main(string[] args)
  2.         {
  3.             StreamReader sr = new StreamReader(args[0]);
  4.             string[] s;
  5.             char[] charSeparators = new char[] { ' ' };

  6.             int code_size = 0;
  7.             int zeropage_size = 0;
  8.             int ram_size = 0;
  9.             int eeprom_size = 0;

  10.             for (int i = 0; i < 8; i++)
  11.             {
  12.                 string s1 = sr.ReadLine();
  13.             }

  14.             while (true)
  15.             {
  16.                 string s1 = sr.ReadLine();
  17.                 s = s1.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries);
  18.                 if(s.Length == 0)
  19.                 {
  20.                     break;
  21.                 }
  22.                 else if (s[7] == ".text" || s[7] == ".const" || s[7] == ".init")
  23.                 {
  24.                     code_size += int.Parse(s[5]);
  25.                 }
  26.                 else if (s[7] == ".eeprom")
  27.                 {
  28.                     eeprom_size += int.Parse(s[5]);
  29.                 }
  30.                 else if (s[7] == ".bsct," && s[8] == "initialized")
  31.                 {
  32.                     zeropage_size += int.Parse(s[5]);
  33.                 }
  34.                 else if (s[7] == ".ubsct" || s[7] == ".share")
  35.                 {
  36.                     zeropage_size += int.Parse(s[5]);
  37.                 }
  38.                 else if (s[7] == ".data," && s[8] == "initialized")
  39.                 {
  40.                     ram_size += int.Parse(s[5]);
  41.                 }
  42.                 else if (s[7] == ".bss")
  43.                 {
  44.                     ram_size += int.Parse(s[5]);
  45.                 }
  46.             }
  47.             Console.WriteLine("  ");
  48. //  Program Size: Code=5056 RO-data=288 RW-data=68 ZI-data=1140  
  49.             Console.WriteLine("Program Size: Code=" + code_size.ToString() + " Eeprom=" + eeprom_size.ToString() + " ZeroPage=" + zeropage_size.ToString() + " Ram=" + ram_size.ToString());
  50.         }
复制代码


原帖出处:http://www.amobbs.com/thread-3700831-1-1.html
分享到:
回复

使用道具 举报

回答|共 10 个

倒序浏览

沙发

xiaopaohu123

发表于 2013-7-9 11:32:05 | 只看该作者

这个功能不错!赞一个
板凳

陈克雄

发表于 2013-7-10 00:14:46 | 只看该作者

坐个板凳~~~SVTD是什么,求科普一下~{:soso_e113:}
地板

KdianC

发表于 2013-7-10 19:13:36 | 只看该作者

好东西啊,赶紧收集起来
5#

陈克雄

发表于 2013-7-11 01:21:44 | 只看该作者

奋斗哥 发表于 2013-7-10 14:09
ST Visual Develop(STVD)为全程控制应用开发 - 从构建和调试应用代码到微控制器编程 - 提供了简便易用且 ...

好工具呀,而且还是免费的!!
6#

hpdell

发表于 2013-12-10 17:41:53 | 只看该作者

本帖最后由 hpdell 于 2013-12-10 17:43 编辑

我的按照此方法加入了,怎么提示错误啊 ???

The command: "size Debug\stm8.map" has failed, the returned value is: -2146232576
stm8.elf - 1 error(s), 0 warning(s)



7#

~大海~

发表于 2016-1-25 19:09:50 | 只看该作者

遇到同样问题求解
8#

L小明

发表于 2016-2-16 17:23:51 | 只看该作者

hpdell 发表于 2013-12-10 17:41
我的按照此方法加入了,怎么提示错误啊 ???

The command: "size Debug\stm8.map" has failed, the ret ...

你那个size.exe文件好像没有放对地方
9#

如果是我

发表于 2017-9-7 11:12:30 | 只看该作者

L小明 发表于 2016-2-16 17:23
你那个size.exe文件好像没有放对地方

在commands的最后一行加入:size $(OutputPath)$(TargetSName).map
吧“:”去掉就好了
所以应该加入size $(OutputPath)$(TargetSName).map
10#

feixiang20

发表于 2017-12-19 22:26:45 | 只看该作者

过来看一看
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条