gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:54:08 25 4
gpt4 key购买 nike

我正在用 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/

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