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