Re: [問題] Keil C sizeof function

看板ASM作者 (ksmrt)時間11年前 (2013/03/30 13:22), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/2 (看更多)
這個問題只要知道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)

03/31 00:23, , 1F
謝謝
03/31 00:23, 1F

04/01 14:04, , 2F
利害,學習了
04/01 14:04, 2F
文章代碼(AID): #1HLdQ5Po (ASM)
文章代碼(AID): #1HLdQ5Po (ASM)