看板 ASM 關於我們 聯絡資訊
請教各位前輩, 我在使用Keil C的時候, 如果有一個function (FuncA)會在main loop和ISR中被呼叫. 則compiler會出現類似下面的warning *** WARNING L15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?_DISPLAY_CHAR?RAMINI CALLER1: ?C_C51STARTUP CALLER2: ?PR?INTERRUPT_TIMER1?INTFUNC 請問該如何安排才能將使這個warninge消除呢? 現在我的做法是將FuncA複製兩次, FuncA, FuncA_ISR 並且在ISR中呼叫FuncA_ISR來避免warning的出現. 但是這就變成Code Size會很大, 所以想請教各位前輩, 是否有其它更有效的方法能避免warning的出現呢? 謝謝. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.210.106.78
ruemann:試不出來 -_- 01/14 14:40
cwl751005:http://www.keil.com/support/docs/805.htm 01/14 14:46
WolfLord:1.INT不使用PAGE(USING) 2.FUNCTION不使用廣域變數 01/14 19:48
WolfLord:3.COMPILER從STACK取用區域變數 01/14 19:49
WolfLord:結果警告沒了,程式老是Stack overflow XDD 01/14 19:50
ksmrt0123:isr是不是做太多事了? 評估看看是不是把一部份工作移出 01/15 00:18
ksmrt0123:isr內只要留最基本的就好 01/15 00:19
WolfLord:Keil的這個警告主要是預防你一般FUNCTION在ISR內幹蠢事 01/15 02:28
WolfLord:並不是ISR有什麼問題,我提的方法是讓編譯器覺得你ISR 01/15 02:28
WolfLord:沒有風險,但是8051的Stack就那麼一點點...通常會炸:P 01/15 02:29
WolfLord:真的討厭看到,在OPTION中BL選項裡面可以在Disable Warn_ 01/15 02:36
WolfLord:ing 欄打上 15 16....任何你懶得看的L Warning 號碼 01/15 02:37
MaxHaru:謝謝.. 01/17 09:13