Robert Adsett wrote:
> At 07:49 PM 3/25/2006 +0100, Sten wrote:
>
>>I've tried this. But entry/exit is still not correct.
>>Here's the result:
>>
>>void uart_irqHandler0(void) __attribute__((interrupt));
>>
>>00000204 <uart_irqHandler0>:
>> 204: e24ee004 sub lr, lr, #4 ; 0x4
>> 208: e92d500f stmdb sp!, {r0, r1, r2, r3, ip, lr}
>> 20c: e3a0120e mov r1, #-536870912 ; 0xe0000000
>> 210: e2811903 add r1, r1, #49152 ; 0xc000
>> 214: e3a00000 mov r0, #0 ; 0x0
>> 218: ebfffffe bl d0 <uart_irqHandler_common>
>> 21c: e8bd500f ldmia sp!, {r0, r1, r2, r3, ip, lr}
>> 220: e25ef004 subs pc, lr, #4 ; 0x4
>>
>>Question:
>>Which gcc version do you use? Which command line parameters do use?
>>How do you differentiate between IRQ and FIQ (only r0..r7 need to be
>>saved) if use
>>__attribute__((interrupt)) only?
>
>
>
> Rather than go through all this hand-wringing why not just write an
> assembly stub? You'd know it was correct and you'd be done already. At
> most it would cost you an extra call from the stub to your C
> function. Heck if it was small enough it might make sense to do the whole
> thing in asm. For that matter you could steal one of my stubs.
>
> Robert
>
Thanks Robert.
At the moment I declare my IRQ functions as "naked" and write my own prologue/epilogue with inline
assembler. But it is less efficient because I don't know which registers are really used, so I have
to save all non-banked registers (r0..12 for IRQ and r0..r7 for FIQ) which is a wast of performance.
Sten
--
/************************************************
Do you need a tiny and efficient real time
operating system (RTOS) with a preemtive
multitasking for LPC2000 or AT91SAM7?
http://nanortos.net-attack.de/
Or some open-source tools and code for LPC2000?
http://www.net-attack.de/
************************************************/Message
Re: [lpc2000] {To TomW} GCC-Bug in IRQs
2006-03-25 by Sten
Attachments
- No local attachments were found for this message.