首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >开关语句从一种情况跳转到另一种情况

开关语句从一种情况跳转到另一种情况
EN

Stack Overflow用户
提问于 2015-05-15 13:13:51
回答 1查看 1.2K关注 0票数 0

这是MSP430微控制器项目的一部分。我的问题是,这个开关语句从案例1:(以及案例2:也是)跳转到案例11:没有明显的原因。我试过调试它,在此过程中开关值selected_cmd没有变化。变量selected_cmd是一个全局变量,其值是在另一个函数中设置的。如果我将简单语句selected_cmd =2放在这个开关语句之前,它就会像预期的那样工作。如果selected_cmd是以编程方式设置的,则从一种情况跳到另一种情况。如何解决这个问题?

代码语言:javascript
复制
switch (selected_cmd)
{
    case 0: // set light level
    {
        DALI_MsgBuf[1] = value;
        DALI_FF = DALI_MsgBuf[1] | (DALI_MsgBuf[0] << 8);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        break;
    }
    case 1: // turn off
    {
        DALI_FF = TURN_OFF | ((DALI_MsgBuf[0] << 8) | 0x01);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        break;
    }
    case 2: // recall max
    {
        DALI_FF = RECALL_MAX_LEVEL | ((DALI_MsgBuf[0] << 8) | 0x01);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        break;
    }
    case 3: // recall min
    {
        DALI_FF = RECALL_MIN_LEVEL | ((DALI_MsgBuf[0] << 8) | 0x01);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        break;
    }
    case 4: // store max lvl
    {
        DALI_FF = (DATA_TRANSFER_REGISTER << 8) | value;
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        DALI_FF = STORE_THE_DTR_AS_MAX_LEVEL | ((DALI_MsgBuf[0] << 8) | 0x01);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        break;
    }
    case 5: // store min lvl
    {
        DALI_FF = (DATA_TRANSFER_REGISTER << 8) | value;
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        DALI_FF = STORE_THE_DTR_AS_MIN_LEVEL | ((DALI_MsgBuf[0] << 8) | 0x01);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        break;
    }
    case 6: // set fade rate
    {
        DALI_FF = (DATA_TRANSFER_REGISTER << 8) | value;
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        DALI_FF = STORE_THE_DTR_AS_FADE_RATE | ((DALI_MsgBuf[0] << 8) | 0x01);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        break;
    }
    case 7: // set fade time
    {
        DALI_FF = (DATA_TRANSFER_REGISTER << 8) | value;
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        DALI_FF = STORE_THE_DTR_AS_FADE_TIME | ((DALI_MsgBuf[0] << 8) | 0x01);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        break;
    }
    case 8: // add to group
    {
        DALI_FF = (ADD_TO_GROUP_0 | value) | ((DALI_MsgBuf[0] << 8) | 0x01);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        break;
    }
    case 9: // remove from group
    {
        DALI_FF = (REMOVE_FROM_GROUP_0 | value) | ((DALI_MsgBuf[0] << 8) | 0x01);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        break;
    }
    case 10: // store as scene
    {
        DALI_FF = STORE_ACTUAL_LEVEL_IN_THE_DTR | ((DALI_MsgBuf[0] << 8) | 0x01);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        DALI_FF = (STORE_THE_DTR_AS_SCENE_0 | value) | ((DALI_MsgBuf[0] << 8) | 0x01);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        break;
    }
    case 11:    // go to scene
    {
        DALI_FF = (GO_TO_SCENE_0 | value) | ((DALI_MsgBuf[0] << 8) | 0x01);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        break;
    }
    case 12:    // remove from scene
    {
        DALI_FF = (REMOVE_FROM_SCENE_0 | value) | ((DALI_MsgBuf[0] << 8) | 0x01);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        break;
    }
    case 13:    // reset
    {
        DALI_FF = RESET | ((DALI_MsgBuf[0] << 8) | 0x01);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        break;
    }
    default: break;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-23 12:26:54

使用

代码语言:javascript
复制
switch (selected_cmd)
{
    case 0: // set light level
        DALI_MsgBuf[1] = value;
        DALI_FF = DALI_MsgBuf[1] | (DALI_MsgBuf[0] << 8);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        break;
    case 1: // turn off
        DALI_FF = TURN_OFF | ((DALI_MsgBuf[0] << 8) | 0x01);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        break;
    case 2: // recall max
        DALI_FF = RECALL_MAX_LEVEL | ((DALI_MsgBuf[0] << 8) | 0x01);
        DALI_Transmit(DALI_FF);
        timer_sleep_ms(5);
        break;
    ...

不要在case:语句之后使用大括号块

您是否从中断中调用此函数。然后,当新的interupt再次进入该方法时,调试器可能会感到困惑。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30260485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档