作者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