MSPGCC und PUSH im Interrupt

Gast #181963
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren