Hi,
I'm looking for the least time and memory consuming
solution of an interrupt routine. I realized that there
are useless register saves/restores when using bit
manipulation. I broke it down to the examples below.

By the way...
In lack of a real-world application I used nonsensical
interrupt vectors ("-1" and "-2", see below). The compiler
answered with a really funny warning:

"warning: Interrupt vector 0xffdf assigned
   to ISR 'testint1' does make sense"

;-)

Cheers,
Ralf



here the examples:


the source lines:
=================

volatile int Counter;

char fAdjust;

interrupt (-2) testint2(void)
{
 if (fAdjust)
    Counter++;
}

compile to:
===========

interrupt (-2) testint2(void)
{
 if (fAdjust)
   0: c2 93 00 00  cmp.b #0, &0x0000 ;r3 As==00
   4: 02 24        jz $+6       ;abs 0xa
    Counter++;
   6: 92 53 00 00  inc &0x0000  ;
}
   a: 00 13        reti

whereas the source lines:
=========================

 struct {
  int Adjust: 1;
} Flags;

interrupt (-1) testint1(void)
{
 if (Flags.Adjust)
    Counter++;
}

compile to:
===========

interrupt (-1) testint1(void)
{
   c: 0f 12        push r15  ;
 if (Flags.Adjust)
   e: d2 b3 00 00  bit.b #1, &0x0000 ;r3 As==01
  12: 02 24        jz $+6       ;abs 0x18
    Counter++;
  14: 92 53 00 00  inc &0x0000  ;
}
  18: 3f 41        pop r15  ;
  1a: 00 13        reti



You




Reply via email to