Я экспериментирую со странной проблемой с 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 работает отлично, но когда я получаю «L» от UART с функцией ReadUART1(), которая возвращает и unsigned int:
unsigned int ReadUART1(void);
И он возвращает «L» в соответствии с моим отладчиком, который соответствует номеру 76 в unsigned int, оператор switch не работает, но режим по-прежнему «L». Даже если я изменю режим на unsigned int, чтобы он совпадал с функцией, он не работает. Я думаю, что мне придется использовать операторы if().
case 'L':
в начало переключателя) - person KevinDTimm   schedule 01.03.2013int
. Итак, изменитеmode
наint
, а такжеcase (int)'L':
и попробуйте это - person KevinDTimm   schedule 01.03.2013switch()
. - person Cloud   schedule 01.03.2013