ページ 11

指定条件までの繰り返し処理について

Posted: 2016年9月30日(金) 12:17
by C素人
指定条件まで繰り返す処理についての質問です。

swの状態に応じて動作が変化します。switch~case文による処理。
case 0x08のとき、繰り返し処理を導入しようと考えています。

行ないたい処理は、
SS=1;
RR=0; という状態を、あるswの状態(0x88)まで続ける

次のコードで試してみているのですが、
case 0x08に入ることはできるのですが、
swの状態が0x88にならなくても、この繰り返し処理から抜けてしまいます。

コードの不備があると思うのですが、原因が分かりません。
教えていただけると助かります。

コード:


while(1){
sw=PORTA &0xF8;
		switch(sw){
			case 0x00:
				SS=0;
				RR=0;
				break;
			case 0x10:
				SS=1;
				RR=0;
				break;
			case 0x08:
        		do {
        			sw = PORTA & 0xF8;  	//スイッチの状態を取得
				SS=1;
				RR=0;
        			} while (!sw==0x88);   
				break;
			default:break;
        	  }
 			prev_sw = sw;

}

Re: 指定条件までの繰り返し処理について

Posted: 2016年9月30日(金) 13:17
by みけCAT
演算子の優先順位を考えると、!の方が==より先に計算されるので、
!sw、すなわち0または1を0x88と比較し、等しくないので繰り返し処理から抜けることになります。

条件式を素直にsw!=0x88にすればいいでしょう。
処理系の仕様、コーディング規約、宗教上の理由などで!=演算子が使えない場合は、!(sw==0x88)とすればいいでしょう。
それもダメな場合は…制約に応じて適当に。

Re: 指定条件までの繰り返し処理について

Posted: 2016年9月30日(金) 14:52
by C素人
みけCATさま

ありがとうございます。
!(sw==0x88)とすることで解決することができました。
解説もしていただき、ありがとうございます。勉強になりました。
sw!=0x88は、コンパイラの制約? でエラーとなってしまいました。