alextime 发表于 2014-1-24 11:18:34

官网历程 中switch case用法不解

// Timer_A3 Interrupt Vector (TAIV) handler
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
switch (TAIV, 10)      // Efficient switch-implementation
{
    case2:break;                        // TACCR1 not used
    case4:break;                        // TACCR2 not used
    case 10:P1OUT ^= 0x01;                // overflow
            break;
}
}
这段代码switch (TAIV, 10) 这里是什么意思?

专注XXOO三十年 发表于 2014-1-24 11:54:57

IAR编译器手册中应该有说明,这是针对430中断向量的优化写法,可以生成很高效的代码。

咯耶 发表于 2014-1-24 12:13:19

逗号运算符

mii 发表于 2014-1-24 12:22:12

是逗号运算,这不就是固定值判断嘛,为什么要搞得这么复杂,确实不解

专注XXOO三十年 发表于 2014-1-24 12:39:13

补充一下,二楼说的有问题。优化的写法应该是这样的:
#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;
}
}

wyq200704 发表于 2014-1-24 12:51:05

以后发代码,请使用插入代码?OK?

alextime 发表于 2014-1-24 13:55:17

咯耶 发表于 2014-1-24 12:13
逗号运算符

什么意思 请您解释下~

xieguangye 发表于 2014-1-24 13:56:03

IAR 430 特有的代码。。。很好用,针对寄存器位的SWITCH语句

error_dan 发表于 2014-1-24 15:16:17

用于生成跳转表?

alextime 发表于 2014-1-24 16:20:07

error_dan 发表于 2014-1-24 15:16
用于生成跳转表?

不懂啊~

lxalxy 发表于 2014-1-24 16:28:13

就是TAIV是10以内的偶数时才进入switch判断

unnormal 发表于 2015-1-8 10:47:14

同样求解

御风 发表于 2015-2-11 19:51:40

专注XXOO三十年 发表于 2014-1-24 12:39
补充一下,二楼说的有问题。优化的写法应该是这样的:

他那个应该是封装的一个函数 然后返回1以内的偶数值吧 我没看源文件 我只是猜测

34071417 发表于 2015-2-28 16:47:28

小于等于10以内的数
页: [1]
查看完整版本: 官网历程 中switch case用法不解