[請益] Keil C Interrupt Compiler的問題

看板ASM (組合語言)作者 (懂得放手..才是王道)時間12年前 (2013/01/14 14:13), 編輯推噓4(409)
留言13則, 5人參與, 最新討論串1/1
請教各位前輩, 我在使用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

01/14 14:40, , 1F
試不出來 -_-
01/14 14:40, 1F


01/14 19:48, , 3F
1.INT不使用PAGE(USING) 2.FUNCTION不使用廣域變數
01/14 19:48, 3F

01/14 19:49, , 4F
3.COMPILER從STACK取用區域變數
01/14 19:49, 4F

01/14 19:50, , 5F
結果警告沒了,程式老是Stack overflow XDD
01/14 19:50, 5F

01/15 00:18, , 6F
isr是不是做太多事了? 評估看看是不是把一部份工作移出
01/15 00:18, 6F

01/15 00:19, , 7F
isr內只要留最基本的就好
01/15 00:19, 7F

01/15 02:28, , 8F
Keil的這個警告主要是預防你一般FUNCTION在ISR內幹蠢事
01/15 02:28, 8F

01/15 02:28, , 9F
並不是ISR有什麼問題,我提的方法是讓編譯器覺得你ISR
01/15 02:28, 9F

01/15 02:29, , 10F
沒有風險,但是8051的Stack就那麼一點點...通常會炸:P
01/15 02:29, 10F

01/15 02:36, , 11F
真的討厭看到,在OPTION中BL選項裡面可以在Disable Warn_
01/15 02:36, 11F

01/15 02:37, , 12F
ing 欄打上 15 16....任何你懶得看的L Warning 號碼
01/15 02:37, 12F

01/17 09:13, , 13F
謝謝..
01/17 09:13, 13F
文章代碼(AID): #1Gyw8C8U (ASM)
文章代碼(AID): #1Gyw8C8U (ASM)