gpt4 book ai didi

c - 带有两个变量的 switch case

转载 作者:太空狗 更新时间:2023-10-29 15:50:46 25 4
gpt4 key购买 nike

我在 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 编译器提供。它需要两个参数,中断 vector 寄存器和允许范围内的最后一个值,在本例中为 10。内在函数用于帮助编译器生成高效代码。

参见 MSP-430 的 IAR compiler documentation在第 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;
}
}

并说:

The effect of the intrinsic function is that the generated code can only handle even values within the given range, which is exactly what is required in this case as the interrupt vector register for Timer A can only be 0, 2, 4, 6, 8, or 10.

第 237 页对 __even_in_range 的描述说:

Instructs the compiler to rely on the specified value being even and within the specified range. The code will be generated accordingly and will only work if the requirement is fulfilled

关于c - 带有两个变量的 switch case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18123522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com