作者ksmrt0123 (ksmrt)
看板ASM
标题Re: [问题] Keil C sizeof function
时间Sat Mar 30 13:22:09 2013
这个问题只要知道function的结束位址就能解决,
所以要想办法在function结尾做出一个label,
一个方法如下:
int foo(void)
{
char gg = 1;
//
// function body
//
if(gg) return(1);
#pragma asm
foo_last:
PUBLIC foo_last
#pragma endasm
}
这样就可在function结尾处安置了一个label.
而gg的目的是要骗compiler最佳化不要把 return() 後的东西化简掉.
有了foo_last後, 就可用下列方法算出function size:
宣告:
extern int foo(void);
extern void * foo_last(void);
计算:
len = (unsigned char code *)foo_last - (unsigned char code *)foo;
----------------------------------------------------------------
下面是烂方法, 不用看.
----------------------------------------------------------------
这个问题只要知道function的结束位址就能解决,
有个做法是在function最後加上一个特别的pattern,
如下例的 0x55, 0xaa
int foo(void)
{
char gg = 1;
//
// function body
//
if(gg) return(1);
#pragma asm
db 055h, 0aah
#pragma endasm
}
然後搜寻此pattern即可.
gg的目的是要骗compiler最佳化不要把 return() 後的东西化简掉.
※ 引述《MaxHaru (懂得放手..才是王道)》之铭言:
: 版上各位前辈你们好,
: 请问Keil C有指令或function可以知道一个function的size吗?
: 应用上需要将某个function的code从flash搬到RAM,
: 但若没办法知道function的size, 可能会搬的不够或搬的太多,
: 请问版上知道有无相关的方法能在Code中知道function的size吗?
: 谢谢..
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.85.121.138
※ 编辑: ksmrt0123 来自: 219.85.121.138 (03/31 00:09)
1F:推 MaxHaru:谢谢 03/31 00:23
2F:推 maxpower:利害,学习了 04/01 14:04