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 が返されます。
unsigned int ReadUART1(void);
私のデバッガによると、unsigned int の 76 番に対応する 'L' が返されます。switch ステートメントは機能しませんが、モードはまだ 'L' です。関数と同じになるようにモードを unsigned int に変更しても機能しません。if() ステートメントを使用する必要があると思います。