看板 ASM 關於我們 聯絡資訊
這個問題只要知道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)
MaxHaru:謝謝 03/31 00:23
maxpower:利害,學習了 04/01 14:04