c - 使用 C30 和 MPLAB X 的 switch 语句的奇怪行为

标签 c switch-statement microchip mplab

我正在用 C30 和 MPLAB X 试验一个奇怪的问题,我有这段代码:

unsigned char mode;
switch(mode){                       // Eligo el modo que se envio a traves del UART
        case FRECUENCIMETER:
            vFrecuencimetro();
            break;

        case LC_METER:
            vLC_Meter();
            break;

        case VOLTMETER:
            break;

        case 'L':
            vLogicAnalizer();
            break;
    }
    if(mode == 'L'){
        vLogicAnalizer();
    }

当模式等于“L”字符时,开关不会按应有的方式进入“case 'L'”,但会进入 if 语句。 但是当我以这种方式更改代码时:

unsigned char mode;
    switch(mode){                     
        case 'L':
            vLogicAnalizer();
            break;
    }
    if(mode == 'L'){
        vLogicAnalizer();
    }

它完美地进入 switch 语句。其他情况定义如下:

#define FRECUENCIMETER      0
#define LC_METER            1
#define VOLTMETER           3

我使用的是 C30 编译器 v3.31 和 MPLAB X v1.41。希望你能帮助我。

谢谢

<小时/>

编辑:

好的,根据答案和评论,我已经这样更改了我的代码:

char mode;

#define FRECUENCIMETER      0
#define LC_METER            1
#define LOGIC_ANALIZER      76    // 'L'
#define VOLTMETER           3
#define NO_MODE             4

switch(mode){                       // Eligo el modo que se envio a traves del UART
            case FRECUENCIMETER:
            vFrecuencimetro();
            break;

        case LC_METER:
            vLC_Meter();
            break;

        case VOLTMETER:
            break;

        case LOGIC_ANALIZER:
            vLogicAnalizer();
            break;
    }

如果在 switch 语句之前我写:

mode = 'L';

switch 语句工作得很好,但是当我使用函数 ReadUART1() 从 UART 得到一个“L”时,该函数返回无符号整数:

unsigned int ReadUART1(void);

根据我的调试器,它返回“L”,对应于 unsigned int 中的数字 76,switch 语句不起作用,但模式仍然是“L”。即使我将模式更改为 unsigned int 以与该函数相同,它也不起作用。我想我必须使用 if() 语句。

最佳答案

已解决。我改变了:

unsigned int mode;

致:

volatile unsigned int mode;

或者与编译器优化级别 0 一起使用:

unsigned int mode;

感谢您的帮助。

关于c - 使用 C30 和 MPLAB X 的 switch 语句的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15146959/

相关文章:

c - 整数被重复?

c - for循环语句中的多个条件

C++ 用户输入关闭程序调试

java - NetBeans:Java:用于在开关中创建所有案例的快捷方式

c++ - 在多线程上下文中卸载 Mono 域

c - 使用 Assert 和 -B 进行 Makefile 帮助/说明

reporting-services - 根据表情更改颜色

c - 错误 : (195) expression syntax

c - 为什么启用 -O2 或更高版本时此代码会中断?

c - 如何使用 PIC18 写入和读取内存?