c - switch case with two variables -
i'm seeing in sample code of ti following switch case, wondering meaning of second variable switch argument receives,
__interrupt void timer_a(void) { switch (taiv, 10) // efficient switch-implementation { case 2: break; // taccr1 not used case 4: break; // taccr2 not used case 10: p1out ^= 0x01; // overflow break; } } my guess there priority first check case value of "10" i'm not sure.
i think there intrinsic call missing:
switch (__even_in_range(taiv, 10)) { __even_in_range intrinsic used msp-430 mcu. provided both ti compiler cl430 msp-430 , iar compiler msp-430. requires 2 arguments, interrupt vector register , last value in allowed range, in example 10. intrinsic used compiler generate efficient code.
see iar msp-430 compiler documentation gives example in page 25:
#pragma vector=timera1_vector __interrupt void timer_a1_isr(void) { switch (__even_in_range(taiv, 10)) { case 2: p1pout ˆ= 0x04; break; case 4: p1pout ˆ= 0x02; break; case 10: p1pout ˆ= 0x01; break; } } and says:
the effect of intrinsic function generated code can handle values within given range, required in case interrupt vector register timer can 0, 2, 4, 6, 8, or 10.
the description of __even_in_range in page 237 says:
instructs compiler rely on specified value being , within specified range. code generated accordingly , work if requirement fulfilled
Comments
Post a Comment