作者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