日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stm8s编译器查看代码量大小的软件

發(fā)布時間:2025/3/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stm8s编译器查看代码量大小的软件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
mapinfo v0.3 for cosmic map?


功能介紹:?
1. 對cosmic編譯器生成的map文件進行分析,顯示ram flash eeprom stack的占用量?
ps:ram僅指ram變量(全局+靜態(tài)+局部變量),不包括棧(stack)?
? ? eeprom僅能統(tǒng)計由@eeprom定義出的變量或常量?


更新說明:?
1. 增加堆棧占用(stack)顯示?
2. 增加對自定義(未定義)段的顯示,一起統(tǒng)計到unknown顯示?




使用方法如下:?
1. 將附件壓縮包中的mapinfo.exe解壓并解壓到stvd的\安裝路徑\STMicroelectronics\st_toolset\stvd中 ?
2. 用stvd打開你的工程文件,在工程上點右鍵選settings... ?
3. 右側(cè)的選項卡選擇Linker,將category的下拉框選成output,然后在Generate Map file前打勾 ?
4. 再將選項卡上選擇到Post-Build,在下方文本框中新粘貼一行內(nèi)容 mapinfo $(OutputPath)$(TargetSName).map ?
5. 點OK按鍵確定,菜單File->save workspace,保存工程 ?

6. 重新編譯下,你就能看到flash,ram,eeprom占用字節(jié)數(shù)了 ?




// mapinfo.cpp : Defines the entry point for the console application.
//


#include <stdio.h>
#include <stdlib.h>
#include <string.h>


#define STR_FLAG ? ?" segment "
#define STR_STACK "Stack size:"


enum
{
? ? TYPE_UNKNOWN,
? ? TYPE_RAM,
? ? TYPE_FLASH,
? ? TYPE_RAM_FLASH,
? ? TYPE_EEPROM,
TYPE_INFO,
TYPE_BIT,
TYPE_DEBUG
};


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


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


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


? ? fp = fopen(fn,"r");
? ? if( NULL==fp )
? ? {
? ? ? ? printf("mapinfo error: Can not read \"%s\"",fn);
? ? ? ? return -1;
? ? }
fseek(fp,0,SEEK_END);
long flen = ftell(fp);
buf = (char*)malloc(flen);
if( NULL==buf )
{
printf("mapinfo error: malloc failed!");
? ? ? ? return -1;
}
? ? fseek(fp,0,SEEK_SET);
? ? fread(buf,1,flen,fp);
? ? fclose(fp);
? ? buf[flen-1]='\0';
? ? //
? ? //
? ? //
? ? char *pos = buf;
char *next = buf;
int byte_unknown = 0;
? ? int byte_flash = 0;
? ? int byte_ram = 0;
? ? int byte_ram_flash = 0;
? ? int byte_eeprom = 0;
int byte_stack = 0;
? ? for(;;)
? ? {
? ? ? ? pos = strstr(pos, STR_FLAG);
? ? ? ? if( NULL==pos )
? ? ? ? {
? ? ? ? ? ? break;
? ? ? ? }
? ? ? ? int len = get_len(pos);
? ? ? ? pos += sizeof(STR_FLAG);
next = pos;
? ? ? ? int type = get_type(pos);
? ? ? ? //
? ? ? ? //
? ? ? ? //
? ? ? ? switch( type )
? ? ? ? {
case TYPE_UNKNOWN:
byte_unknown += len;
break;
? ? ? ? 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;
? ? ? ? }
? ? }
pos = strstr(next,STR_STACK);
if( pos!=NULL )
{
byte_stack = atoi(&pos[sizeof(STR_STACK)]);
}
? ? //
? ? //
? ? //
if( byte_unknown!=0 )
{
printf("\nram:%d ? flash:%d ? eeprom:%d ? stack:%d ? unknown:%d", byte_ram,byte_flash,byte_eeprom,byte_stack,byte_unknown);
}
else
{
printf("\nram:%d ? flash:%d ? eeprom:%d ? stack:%d", byte_ram,byte_flash,byte_eeprom,byte_stack);
}
? ? 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, initialized") )
? ? {
? ? ? ? return TYPE_BIT;
? ? }
? ? 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, initialized") )
? ? {
? ? ? ? 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, initialized") )
? ? {
? ? ? ? return TYPE_RAM;
? ? }
? ? else
? ? if( 0==STRCMP(pos,"data, from") )
? ? {
? ? ? ? return TYPE_FLASH;
? ? }
? ? else
? ? if( 0==STRCMP(pos,"bss") )
? ? {
? ? ? ? return TYPE_RAM;
? ? }
else
if( 0==STRCMP(pos,"info.") )
{
return TYPE_INFO;
}
else
if( 0==STRCMP(pos,"debug") )
{
return TYPE_DEBUG;
}
? ? else
? ? if( 0==STRCMP(pos,"init") )
? ? {
? ? ? ? return TYPE_FLASH;
? ? }
? ? return TYPE_UNKNOWN;
}


總結(jié)

以上是生活随笔為你收集整理的stm8s编译器查看代码量大小的软件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。