我在ti的示例代码中看到了下面的开关盒,
我想知道switch参数接收到的第二个变量的含义是什么,
__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;
}
}
我的猜测是,有一个优先权,首先检查案件价值“10”,但我不太确定。
最佳答案
我认为缺少一个内在调用:
switch (__even_in_range(TAIV, 10))
{
__even_in_range
是用于msp-430 mcu的内部函数。它由用于msp-430的ti编译器cl430
和用于msp-430的iar编译器提供。它需要两个参数,中断向量寄存器和允许范围内的最后一个值,在本例中是10。内部函数用于帮助编译器生成有效的代码。MSP-430compiler documentation见IAR,该示例见第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;
}
}
说:
内在函数的作用是生成的代码只能处理给定范围内的偶数值,这正是在这种情况下所需的,因为定时器A的中断向量寄存器只能是0、2、4、6、8或10。
第237页对
__even_in_range
的描述是:指示编译器依赖于指定值是偶数且在指定范围内。代码将相应地生成,并且仅在满足需求时才起作用