Forum: Compiler & IDEs MSPGCC und PUSH im Interrupt


von Roy (Gast)


Lesenswert?

Hallo Cracks,

ich habe Probleme mit meinem RAM Bereich und STacküberlauf und so.
Jetzt war ich auf der Suche nach PUSH Befehlen die man rausschmeissen
kann um den STack nicht unnötig vollzukrachen.
Dabei fiel mir auf das in meienr UART Interrupt Routine ein Push R15
auftaucht obwohl R15 garnicht benutz wird ???
Hier meien Quelltext :
C:
interrupt (UART0RX_VECTOR)      int_UART0RX (void)
{

  if (!(URXIFG0 & IFG2))     // if zeile raus um code zu sparen
  { // Receive Start Edge
    RAB.UARTstatus |= StartEdge;
    U0TCTL &= ~URXSE;
    U0TCTL |=  URXSE;
  } else
    {
      RAB.UARTRecByte = RXBUF0;
      RAB.UARTstatus |= CharRec;
    };

};
MSPGCC ASM:
interrupt (UART0RX_VECTOR)      int_UART0RX (void)
{
    fa84:  0f 12         push  r15    ;
  asm ("bit.b #0x01,%0" :: "m" (URXIFG0));
    fa86:  d2 b3 82 fa   bit.b  #1,  &0xfa82  ;r3 As==01

  if (!(URXIFG0 & IFG2))     // if zeile raus um code zu sparen
    fa8a:  d2 b3 03 00   bit.b  #1,  &0x0003  ;r3 As==01
    fa8e:  07 20         jnz  $+16       ;abs 0xfa9e
  { // Receive Start Edge
    RAB.UARTstatus |= StartEdge;
    fa90:  d2 d3 99 02   bis.b  #1,  &0x0299  ;r3 As==01
    U0TCTL &= ~URXSE;
    fa94:  f2 c2 71 00   bic.b  #8,  &0x0071  ;r2 As==11
    U0TCTL |=  URXSE;
    fa98:  f2 d2 71 00   bis.b  #8,  &0x0071  ;r2 As==11
    fa9c:  05 3c         jmp  $+12       ;abs 0xfaa8
  } else
    {
      RAB.UARTRecByte = RXBUF0;
    fa9e:  d2 42 76 00   mov.b  &0x0076,&0x029a  ;0x0076
    faa2:  9a 02
      RAB.UARTstatus |= CharRec;
    faa4:  e2 d3 99 02   bis.b  #2,  &0x0299  ;r3 As==10
    };
};
    faa8:  3f 41         pop  r15    ;
    faaa:  00 13         reti

Wie kann man dem MSPGCC sowas abgewöhnen ?

Danke im Voraus für die Hilfe :-)

Roy

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.