2016-04-29 10 views
1

Ich fand diesen Teil aus dem Beispielcode für UART für MSP430FR57xx von TI. Ich verstehe nicht, was __even_in_range(UCA0IV,0x08) bedeutet?was bedeutet durch __even_in_range (UCA0IV, 0x08)

#pragma vector=USCI_A0_VECTOR 
__interrupt void USCI_A0_ISR(void) 
{ 
    switch(__even_in_range(UCA0IV,0x08)) 
    { 
    case 0:break;        // Vector 0 - no interrupt 
    case 2:         // Vector 2 - RXIFG 
     while (!(UCA0IFG&UCTXIFG));   // USCI_A0 TX buffer ready? 
     UCA0TXBUF = UCA0RXBUF;    // TX -> RXed character 
     break; 
    case 4:break;        // Vector 4 - TXIFG 
    default: break; 
    } 
} 

Antwort

3

Das Interrupt-Vektorregister hat nie einen Wert, der ungerade oder größer als acht ist. Wenn Sie dem Compiler das mitteilen, können Sie etwas effizienteren Code generieren, indem Sie die Prüfungen für diese Werte auslassen und die Fälle mit einer einfachen Sprungtabelle implementieren.