我正在用 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();
}
当 mode 等于 '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 语句工作得很好,但是当我从 UART 得到一个“L”时,函数 ReadUART1() 返回和 unsigned int:
unsigned int ReadUART1(void);
它根据我的调试器返回“L”,它对应于 unsigned int 中的数字 76,switch 语句不起作用,但模式仍然是“L”。即使我将模式更改为 unsigned int 以与功能相同,它也不起作用。我想我将不得不使用 if() 语句。