--- In lpc2000@yahoogroups.com, "roger_lynx" <roger_lynx@...> wrote:
>
> --- In lpc2000@yahoogroups.com, Sten <list@> wrote:
> >
> > 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.
>
>
> Yes. IRQ "undressed" and inline assembly for prologue/epilogue.
>
> I was curious about the performance hit myself, but rather
> than doing it academic-like way (in days), I measured it (in 10
minutes).
> The test is lousy,since the execution of logic analyzer markers skews
> the measurement, but comparing:
>
>
> 1. stmia sp, {r0-r11} // 12 regs took 435 ns
> 2. stmia sp, {r0-r3} // 4 regs took 305 ns
> 3. stmia sp, {r0} // 1 reg took 255 ns
>
>
> on LPC 2148, pclk=clck=60 MHz
> LA's sampling rate; f=200 MHz.
>
>
> we get some idea; with systematic error factored in,
> it doesn't make such a big difference to save 12 or 4 regs.
>
>
> Roger
>
> >
> > 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/
> >
> > ************************************************/
> >
>
Hi Guys,
I've just hit this problem in my UART handler, I'm new to the ARM
and haven't used it's asm yet! could one of you ASM gurus
please post the required inline entry/exit code for us dummys
thanks,Message
Re: {To TomW} GCC-Bug in IRQs
2006-03-26 by frankcallaghan9
Attachments
- No local attachments were found for this message.