作者MaxHaru (懂得放手..才是王道)
看板ASM
標題[請益] Keil C Interrupt Compiler的問題
時間Mon Jan 14 14:13:29 2013
請教各位前輩,
我在使用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
1F:推 ruemann:試不出來 -_- 01/14 14:40
3F:推 WolfLord:1.INT不使用PAGE(USING) 2.FUNCTION不使用廣域變數 01/14 19:48
4F:→ WolfLord:3.COMPILER從STACK取用區域變數 01/14 19:49
5F:→ WolfLord:結果警告沒了,程式老是Stack overflow XDD 01/14 19:50
6F:→ ksmrt0123:isr是不是做太多事了? 評估看看是不是把一部份工作移出 01/15 00:18
7F:→ ksmrt0123:isr內只要留最基本的就好 01/15 00:19
8F:推 WolfLord:Keil的這個警告主要是預防你一般FUNCTION在ISR內幹蠢事 01/15 02:28
9F:→ WolfLord:並不是ISR有什麼問題,我提的方法是讓編譯器覺得你ISR 01/15 02:28
10F:→ WolfLord:沒有風險,但是8051的Stack就那麼一點點...通常會炸:P 01/15 02:29
11F:推 WolfLord:真的討厭看到,在OPTION中BL選項裡面可以在Disable Warn_ 01/15 02:36
12F:→ WolfLord:ing 欄打上 15 16....任何你懶得看的L Warning 號碼 01/15 02:37
13F:→ MaxHaru:謝謝.. 01/17 09:13