amobbs.com 阿莫电子技术论坛

标题: [cosmic]自己做的小工具,stm8,st7测试通过,编译后显示flash,ram,eeprom占用字节的mapi [打印本页]

作者: snoopyzz    时间: 2010-5-31 13:06
标题: [cosmic]自己做的小工具,stm8,st7测试通过,编译后显示flash,ram,eeprom占用字节的mapi
使用方法如下,
1. 将附件压缩包中的mapinfo.exe解压并解压到stvd的\安装路径\STMicroelectronics\st_toolset\stvd中
2. 用stvd打开你的工程文件,在工程上点右键选settings...
3. 右侧的选项卡选择Linker,将category的下拉框选成output,然后在Generate Map file前打勾
4. 再将选项卡上选择到Post-Build,在下方文本框中新粘贴一行内容 mapinfo $(OutputPath)$(TargetSName).map
5. 点OK按键确定,菜单File->save workspace,保存工程
6. 重新编译下,你就能看到flash,ram,eeprom占用字节数了
点击此处下载 ourdev_558532.rar(文件大小:16K) (原文件名:mapinfo.rar)



后记:

  
我在下面链接的帖子放了新版 ,增加了堆栈占用显示,和修正一些小BUG,请移步重新下载,谢谢~
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4353714
作者: hy317    时间: 2010-5-31 13:11
mark
作者: snoopyzz    时间: 2010-5-31 13:21
我发贴一向很冷。。。
作者: snoopyzz    时间: 2010-5-31 15:03
再一次证明,我一发贴就沉底,没人要晚上删了算了,伤心ing...
作者: lj2505    时间: 2010-5-31 15:08
顶一下,虽然现在没用上。
作者: ffssmm    时间: 2010-5-31 15:13
谢谢!
作者: bad_fpga    时间: 2010-5-31 15:45
友情帮顶
作者: CoolBird007    时间: 2010-5-31 17:15
不错。试过很好用。。
作者: wangqishao    时间: 2010-5-31 18:08
mark
作者: STM8_DIY    时间: 2010-5-31 19:03
顶,楼主好人
作者: wmm20031015    时间: 2010-5-31 19:42
我顶
作者: lrzxc    时间: 2010-5-31 19:53
下载来,试用一下
作者: 1181zjf    时间: 2010-5-31 19:58
不错
作者: czg94215    时间: 2010-5-31 20:02
下载试一下,顶楼主
作者: snoopyzz    时间: 2010-6-1 03:54
谢谢支持的人~ 有人需要,能用的就好^_^
作者: geniusjia    时间: 2010-6-1 08:08
顶一下
作者: steven    时间: 2010-6-1 08:12
顶一下
作者: zhongzhiyi    时间: 2010-6-1 08:17
不错。试过很好用。。
作者: swustlx86    时间: 2010-6-1 11:44
顶一下啊
作者: blueagle    时间: 2010-6-1 13:06

作者: mysde    时间: 2010-6-1 15:21
别删,我还没试用呢?
作者: pldjn    时间: 2010-6-1 15:31
如果能讲下MAP结构就更好了。
作者: mysde    时间: 2010-6-1 15:39
楼上真是。。。。
不过我赞同!
作者: wanyou132    时间: 2010-6-1 17:40
正对看不到flash,ram,eeprom占用字节数着急呢
LZ的东西对我真是及时雨~~~~~~~~~
作者: czg94215    时间: 2010-6-1 19:34
感谢楼主,今天加进去一用,很爽
作者: ak742001    时间: 2010-6-1 20:08
顶下
作者: zhenhuah    时间: 2010-6-1 20:37

作者: snoopyzz    时间: 2010-6-1 20:49
map文件很有用的,我之前都是自己看map文件的,工具做出来是给同事用的,后来QQ上传给朋友,写了说明,就顺便发了上来。

map文件有什么不明白的吗?我可以解答下
作者: chengz    时间: 2010-6-2 08:20
顶.如果能提供源代码交流一下编程技巧就更好了。曾有个网友用.Net编写了一个名为"size"的相同功能软件,代码规模还小些。
作者: mysde    时间: 2010-6-2 14:00
/***********************下面是编译器生成的map文件**************************************/

Map of Debug\stm8s105.sm8 from link file Debug\stm8s105.lkf - Wed Jun 02 13:50:43 2010
                               --------
                               Segments
                               --------

start 00008080 end 00008192 length   274 segment .const
start 0000827c end 0000a107 length  7819 segment .text
start 00004000 end 00004000 length     0 segment .eeprom
start 00000000 end 0000000d length    13 segment .bsct, initialized
start 0000819f end 000081ac length    13 segment .bsct, from
start 0000000d end 000000bc length   175 segment .ubsct
start 000000bc end 000000bc length     0 segment .bit
start 000000bc end 000000bc length     0 segment .share
start 00000100 end 000001d0 length   208 segment .data, initialized
start 000081ac end 0000827c length   208 segment .data, from
start 000001d0 end 00000590 length   960 segment .bss
start 00000000 end 0000f606 length 62982 segment .debug
start 00008000 end 00008080 length   128 segment .const
start 00008192 end 0000819f length    13 segment .init


/***************************************end**************************************************/

/********************下面是使用你的软件生成的数据******************************************/
Running Linker
clnk -l"C:\Program Files\COSMIC\CXSTM8_16K\Lib"  -o Debug\stm8s105.sm8 -mDebug\stm8s105.map Debug\stm8s105.lkf
cvdwarf Debug\stm8s105.sm8

Running Post-Build step
chex -o Debug\stm8s105.s19 Debug\stm8s105.sm8
mapinfo Debug\stm8s105.map

ram:1564   flash:8247   eeprom:0

stm8s105.elf - 0 error(s), 0 warning(s)

/*******************************************end****************************************************/

试用了,相当不错
帮看看各段的意思,先谢谢你!
作者: snoopyzz    时间: 2010-6-3 04:31
start 00008080 end 00008192 length   274 segment .const
274byte:常量,只占用flash。比如const char xxx[] = "12345";

start 0000827c end 0000a107 length  7819 segment .text
7819byte:代码段, 只占用flash。比如a = b + c;

start 00000000 end 0000000d length    13 segment .bsct, initialized
start 0000819f end 000081ac length    13 segment .bsct, from
13byte:赋了初值的全局变量(0页,即@tiny),同时占用RAM和FLASH,flash中保存初值,在main之前赋值到ram中相应位置(当然,你可以自己编写初始化代码)

start 0000000d end 000000bc length   175 segment .ubsct
175byte:未赋初值的全局变量(0页,即@tiny),只占用RAM

start 00000100 end 000001d0 length   208 segment .data, initialized
start 000081ac end 0000827c length   208 segment .data, from
208byte:赋了初值的全局变量(非0页,即@near),同时占用RAM和FLASH


start 000001d0 end 00000590 length   960 segment .bss
960byte:未赋初值的全局变量(非0页,即@near),只占用RAM

start 00008000 end 00008080 length   128 segment .const
128byte:中断向量,占用flash开始的128字节

start 00008192 end 0000819f length    13 segment .init
13byte:占用flash

======================================

请重新下载mapinfo:修正了一个BUG(将data, from段应该占用的flash字节统计到了RAM字节)
点击此处下载 ourdev_559135.rar(文件大小:17K) (原文件名:mapinfo.rar)
作者: snoopyzz    时间: 2010-6-3 04:36
c#.net其实我也很喜欢用,但考虑启动时间慢,而且部分人还没有安装.net环境,所以用回vc写的代码
源码不长,如下
=====================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define STR_FLAG    " segment "

enum
{
    TYPE_UNKOWN,
    TYPE_RAM,
    TYPE_FLASH,
    TYPE_RAM_FLASH,
    TYPE_EEPROM
};

int get_len(char *pos);
int get_type(char *pos);

int main(int argc, char* argv[])
{
    char fn[2048] = "\0";
    char buf[2048];

    for(int i=1;i<argc;i++)
    {
        strcat(fn,argv);
    }
    //
    //
    //
    FILE *fp;

    fp = fopen(fn,"r");
    if( NULL==fp )
    {
        printf("mapinfo error: Can not read \"%s\"",fn);
        return -1;
    }
    fseek(fp,0,SEEK_SET);
    fread(buf,1,sizeof(buf),fp);
    fclose(fp);
    buf[sizeof(buf)-1]='\0';
    //
    //
    //
    char *pos = buf;
    int byte_flash = 0;
    int byte_ram = 0;
    int byte_ram_flash = 0;
    int byte_eeprom = 0;
    for(;;)
    {
        pos = strstr(pos, STR_FLAG);
        if( NULL==pos )
        {
            break;
        }
        int len = get_len(pos);
        pos += sizeof(STR_FLAG);
        int type = get_type(pos);
        //
        //
        //
        switch( type )
        {
        case TYPE_FLASH:
            byte_flash += len;
            break;
        case TYPE_RAM:
            byte_ram += len;
            break;
        case TYPE_RAM_FLASH:
            byte_ram += len;
            byte_flash += len;
            break;
        case TYPE_EEPROM:
            byte_eeprom += len;
            break;
        }
    }
    //
    //
    //
    printf("\nram:%d   flash:%d   eeprom:%d", byte_ram,byte_flash,byte_eeprom);
    return 0;
}

int get_len(char *pos)
{
    *pos = '\0';
    while(*--pos!=' ')
    {
    }
    return atoi(pos+1);
}

#define    STRCMP(str1,str2)    strncmp(str1,str2,sizeof(str2)-1)
int get_type(char *pos)
{
    if( 0==STRCMP(pos,"const") )
    {
        return TYPE_FLASH;
    }
    else
    if( 0==STRCMP(pos,"text") )
    {
        return TYPE_FLASH;
    }
    else
    if( 0==STRCMP(pos,"eeprom") )
    {
        return TYPE_EEPROM;
    }
    else
    if( 0==STRCMP(pos,"bsct, from") )
    {
        return TYPE_RAM_FLASH;
    }
    else
    if( 0==STRCMP(pos,"ubsct") )
    {
        return TYPE_RAM;
    }
    else
    if( 0==STRCMP(pos,"bit, from") )
    {
        return TYPE_RAM_FLASH;
    }
    else
    if( 0==STRCMP(pos,"share") )
    {
        return TYPE_RAM;
    }
    else
    if( 0==STRCMP(pos,"data, from") )
    {
        return TYPE_RAM_FLASH;
    }
    else
    if( 0==STRCMP(pos,"bss") )
    {
        return TYPE_RAM;
    }
    else
    if( 0==STRCMP(pos,"init") )
    {
        return TYPE_FLASH;
    }
    return TYPE_UNKOWN;
}

=======================

编译后release模式生成下面这个文件,和上一楼内容相同,不需要重复下载,顶楼已经无法更新了

下载mapinfo:修正了一个BUG(将data, from段应该占用的flash字节统计到了RAM字节)
点击此处下载 ourdev_559135.rar(文件大小:17K) (原文件名:mapinfo.rar)
作者: snoopyzz    时间: 2010-6-3 09:25
又开始冷了,源码我都公布了。。。还是stm8本身太冷?
作者: chengz    时间: 2010-6-3 09:57
多谢了
作者: windy__xp    时间: 2010-6-3 10:04
非常有用,顶。
作者: CoolBird007    时间: 2010-6-3 11:13
再顶一次,好东西。
作者: mysde    时间: 2010-6-3 14:33
非常感谢你的解答!

估计使用stm8的大用户多,有问题都问代理商的技术支持去了,来这里的少
作者: windy__xp    时间: 2010-6-3 15:04
我问过我们代理的技术支持两个问题:

1. STM8S 带 Bootloader 的型号,中断向量表能搬移吗?回答:不能搬移
2. STM8S103K3 的RAM为什么只能用512Bytes?回答:硬件堆栈,占用了512 字节

    我很无语,以后都怕问技术支持问题了。
作者: snoopyzz    时间: 2010-6-3 15:19
我也很怕技术支持,打电话问某台湾芯片的技术支持,因为我发现芯片的减法运算对C标志位影响,在减0时和减其它数时不一样-_-

结果技术支持说,“是的,我们的芯片是有这么个小问题”
我问解决方法,她说“你不要用减法就好了”
作者: CoolBird007    时间: 2010-6-3 16:47
呵呵呵,我有问题都是问SNOOPYZZ的。他都能帮我解决。。
作者: windy__xp    时间: 2010-6-3 17:49
Running Pre-Link step
mapinfo F:\test\Debug\fc231ag.map
mapinfo error: Can not read "F:\test\Debug\fc231ag.map"

The command: "mapinfo F:\test\Debug\fc231ag.map" has failed, the returned value is: -1


   fp = fopen(fn,"r");
    if( NULL==fp )
    {
        printf("mapinfo error: Can not read \"%s\"",fn);
        return -1;
    }

    应该是打开文件失败了,莫非我人品有问题?忙别的事,有时间再试试看。
作者: gentlerain    时间: 2010-6-3 18:00
这么好的东东,一定要顶!
作者: snoopyzz    时间: 2010-6-3 18:09
回 【40楼】 windy__xp 龙笑:
map文件是否存在?你在相应的F:\test\Debug\中确认下是否有fc231ag.map
如果没有,说明勾选map文件的步骤3没有操作正确,请重新试下顶楼的步骤3
作者: windy__xp    时间: 2010-6-3 18:18
回复【42楼】snoopyzz
回 【40楼】 windy__xp 龙笑:
map文件是否存在?你在相应的f:\test\debug\中确认下是否有fc231ag.map  
如果没有,说明勾选map文件的步骤3没有操作正确,请重新试下顶楼的步骤3
-----------------------------------------------------------------------

    100% 肯定,map 文件是存在的,并且我直接 copy 这个 "F:\test\Debug\fc231ag.map"  路径到浏览器,也可以打开 map 文件。也觉得这个问题比较奇怪,是不是打开文件的方式 “r”有问题?有时间我自己试验一下吧,最近太忙,今天还有个原理图必须得设计出来。
作者: snoopyzz    时间: 2010-6-3 18:40
"r"是按只读方式打开,居然会失败了-_-没遇到过,除非是被别个软件独占了。。。
作者: windy__xp    时间: 2010-6-4 09:31
回复【44楼】snoopyzz
"r"是按只读方式打开,居然会失败了-_-没遇到过,除非是被别个软件独占了。。。
-----------------------------------------------------------------------

    可以了,谢谢。 位置放错了,放到 Pre-Link 中去了,Link 前没有产生 map 文件,放 Post-Build 中就好了,我的错。
作者: snoopyzz    时间: 2010-6-4 12:47
解决了问题就好:)
作者: yedeson    时间: 2010-6-4 13:14
这样统计有点 问题。

cosmic 的MAP文件中Segments 中可能没有统计EEPROM,但在Symbols中列出了EEPROM变量。

我的程序用100个字节EEPROM,但Segments 统计为0。
作者: snoopyzz    时间: 2010-6-4 13:46
你的eeprom的定义方法是
@eeprom char ch[10] = {0};
之类的吗?
不是的话是无法统计的,按地址来统计的话,想要各个型号通用,还得判别型号,无异降低了通用性,增加了实现的复杂度。
作者: yedeson    时间: 2010-6-4 21:04
不是这种定义,都是没有赋初值的。
从map文件Segments 可以判断eeprom的起始地址,再以这个起始地址 判断Symbols中的地址,应该可以统计出eeprom真实使用情况了。
作者: snoopyzz    时间: 2010-6-8 09:35
LS的建议不错,可以考虑下,但eeprom的终止地址同样也得判断
作者: wanyou132    时间: 2010-6-13 13:20
很好用 的小工具
作者: jerico    时间: 2010-6-13 14:38
这个工具不错
作者: honami520    时间: 2010-6-22 10:17
用了下,很好用
作者: ddllxxrr    时间: 2010-6-22 11:36
看完本贴我怎么感觉,编译环境不怎么样
作者: yilichen    时间: 2010-8-3 23:02
看来很不错,好贴要占位!
作者: haigerl    时间: 2010-8-4 17:54
mark
作者: dreamboy    时间: 2010-8-5 21:40
mark,好东东
作者: durgy    时间: 2010-9-11 19:23
谢谢
作者: chaled    时间: 2010-9-18 22:47
标记一下,好东西
作者: adsbear    时间: 2010-9-25 20:41
好东西,实用!
作者: arduino    时间: 2010-9-25 21:54
支持!
作者: danielzhuang    时间: 2010-9-30 14:37
保留下
作者: zsr003    时间: 2010-10-10 21:56
试用了,很好!谢谢楼主!
作者: James_King    时间: 2010-10-11 08:40
mark
作者: gavin_li    时间: 2010-10-11 10:47
没用过,有空试试
作者: qingzhong    时间: 2010-10-21 14:58
东西很好,我也用了avr-size,FLASH容量有点差别,我用的是105,理论上RAM有2K,但是我在RAM里把表格定大点,总的RAM超过255就会出错,这是什么原因呢。
avr-size "Debug\glass tube.elf"
   text           data            bss            dec            hex        filename
   3053             30             25           3108            c24        Debug\glass tube.elf
mapinfo "Debug\glass tube.map"

ram:55   flash:3083   eeprom:0
作者: snoopyzz    时间: 2010-10-21 15:07
回LS:@near
作者: 11yuxiaofeng    时间: 2010-10-24 20:08
很好的东西
作者: snoopyzz    时间: 2010-10-28 12:09
更新,详细见内附readme.txt

mapinfo for cosmicourdev_593473S9G527.zip(文件大小:19K) (原文件名:mapinfo.zip)
作者: byin    时间: 2010-10-28 17:56
mark
作者: CoolBird007    时间: 2010-10-28 18:45
好东西。。。一定要顶。
作者: ff6588877    时间: 2010-11-17 20:19
帮顶,帮顶
作者: Maurice    时间: 2010-11-27 03:45
现在拿来用也挺不错,帮顶!
作者: www1519    时间: 2010-12-19 18:34
mark
作者: kanerier    时间: 2010-12-23 10:04
顶你,mark
作者: shuxmpx123    时间: 2010-12-27 21:46
非常感谢  很方便···
作者: shuxmpx123    时间: 2010-12-27 21:57
ram:187   flash:4310   eeprom:0   stack:49

lu_603_105.elf - 0 error(s), 0 warning(s)

extern @near uint8_t eeprom_mode_type @0x4000;
extern @near uint8_t eeprom_fan_type @0x4008;
extern @near uint8_t eeprom_config_temperature_h @0x4010;
extern @near uint8_t eeprom_config_temperature_l @0x4018;

我的EEPROM是这样定义的,但是也检测不到  呵呵   不过没什么关系,能看到ram和flash就可以了··
作者: wso75839840    时间: 2010-12-28 09:25
谢谢楼主
作者: snoopyzz    时间: 2010-12-28 09:31
LS两位,我在下面链接的帖子放了新版 ,增加了堆栈占用显示,和修正一些小BUG,请移步重新下载,谢谢~
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4353714
作者: jinbangzhou    时间: 2011-2-18 10:01
谢谢
作者: stevenh    时间: 2011-4-13 22:31
很好用,谢谢了!
作者: kten    时间: 2011-4-14 21:46
刚开始玩stm8,顶起
作者: gyzzg2030    时间: 2011-9-17 20:43
谢谢
作者: wangtian    时间: 2011-12-22 15:32
刚好要用,下载下来.谢谢!
作者: baifang20    时间: 2011-12-22 20:48
mark...谢谢楼主
作者: gale    时间: 2011-12-25 21:32
MARK
作者: wuguoyan    时间: 2012-1-10 23:04
回复【31楼】snoopyzz  
-----------------------------------------------------------------------

太好用了。谢谢
作者: freemyselfqb    时间: 2012-5-22 15:15
顶一下  
作者: eddia2012    时间: 2013-3-26 08:35
好东西哦,楼主讲的最后的更新下载不了(ourdev),是否可以重新上传下,谢谢!
作者: ZXL1969    时间: 2013-3-26 22:11
这个不错
作者: emobbs    时间: 2014-2-9 21:46
好东西,这个一定要顶
作者: qiqirachel    时间: 2014-2-9 21:53
不知道干什么用的,顶一下!!~~~




欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/) Powered by Discuz! X3.4