【发布时间】:2012-10-03 10:52:15
【问题描述】:
我正在尝试使用 USART 通信执行一些命令并使用 ATmega32-A 读取一些值。看看我的代码。我的问题是我正在尝试添加一些案例(嵌套开关案例),但我没有得到我想要的。我希望我能提供解决我的问题所需的所有信息。
void uniCom(void) {
switch (Command) {
/* ... */
case (muxsel):
printf(muxselection);
switch (c) {
case 1:
printf("this is mux chaneel1");
DDRB = 0b10111111;
PORTB = 0b00000000;
printf("adc Value", ReadAdc());
Command = 0;
break;
case 2:
/*-------------------*/
break;
}
Command = 0;
break;
/* ... */
default:
Command = 0;
break;
}
} 问题是未定义的 c.而且我没有看到任何 muxselection 声明,可能缺少 "" ?现在是第二种方法。
void selcase(void) {
unsigned char c;
printf("muxselection");
while (rx_counter0) {
c = getchar();
switch (c) {
case 1:
printf("this is mux chaneel1");
DDRB = 0b10111111;
PORTB = 0b00000000;
printf("adc Value", ReadAdc());
Command = 0;
break;
case 2:
/*-------------------*/
break;
}
}
}
void uniCom(void) {
switch (Command) {
/* ... */
case (muxsel):
printf(muxselection);
selcase();
Command = 0;
break;
/* ... */
default:
Command = 0;
break;
}
}
我的问题是我正在执行我声明的所有命令,但我想在主开关案例命令“muxsel”之一中选择更多案例。为此,我编写了嵌套开关盒。如果我在超级终端上选择“muxsel”命令,那么它会像“muxselection”一样打印,然后如果我在第二个开关中输入 1 以选择“case '1'”,则不会打印任何内容。它正在打印“找不到命令”。问题是什么。我想执行嵌套开关,但我无法使用上面的代码来执行此操作,我也尝试过这样的操作。
void selcase(void) {
unsigned char c;
printf("muxselection");
while (rx_counter0) {
c = getchar();
switch (c) {
case '1':
printf("this is mux chaneel1");
DDRB = 0b10111111;
PORTB = 0b00000000;
printf("adc Value", ReadAdc());
c= 0;
break;
case '2':
/*-------------------*/
break;
default;
break;
}
}
}
为嵌套的 switch case 创建一个函数并在主 switch case 中调用,如下所示。
void uniCom(void) {
switch (Command) {
/* ... */
case (muxsel):
printf(muxselection);
selcase();
Command = 0;
break;
/* ... */
default:
Command = 0;
break;
}
}
这种方式也不起作用,请建议我如何克服这个问题。我想在主开关案例中选择一个命令,例如“muxsel”,然后我使用案例语句选择多路复用通道。任何帮助表示赞赏。
提前致谢。
我已经解决了这个问题。
【问题讨论】:
-
你的缩进离真棒还差得很远,看代码有点困难。
-
更改后的
case(muxsel):的情况是否还能编译?我看不到c来自switch(c)的任何地方。更不用说case 2: ----,但我认为它是一个占位符。 -
命令是全局变量吗? 此代码由专家编写
-
也许它不是由代码编写者选择的全局变量。这看起来像一个完整的代码。没有
#include也没有声明它......好吧,它看起来确实很奇怪。或者我错过了什么。status也是如此。当你在变量名中输入错字时,这个默认的 int 类型编译器经常会发出警告吗? -
我以某种方式编辑了代码以更正缩进。非常困难,因为 OP 将一些块置于部分状态,而没有右括号..