本日のC言語

(25日になってしまったがこの日にやったC言語ネタ)
最近、なんだかマイコンで書くC言語がおもしろい(近くにちょっと筋のよい初心者がいるので、その影響もある)
というわけで、ある割り込み処理を以下のように書いていたのだが(これも十分C言語らしいけど)

void TimerA0_int(void){
	tabsr ^= 0x01;

	switch(Pwm_state){
		case STATE1:
			p7 ^= 0x01;
			break;
		case STATE2:
			p7 ^= 0x02;
			break;
		case STATE3:
			p7 ^= 0x04;
			break;
		case STATE4:
			p7 ^= 0x08;
			break;
	}
	ir_ta0ic = 0;
}

これを分岐なしのプログラムに変更(よりC言語らしい(笑)アセンブラならこんな書き方をしないし、より現代的な言語ではナンセンスな書き方)

void TimerA0_int(void){
	tabsr ^= 0x01;
	p7 ^= (0x01 << (Pwm_state - 1));
	ir_ta0ic = 0;
}

演算が入っているので、チューニング的にはまだまだだが、分岐をなくすのが目的なのでこれで十分。しかし、こういう一瞬には、C言語にローテート命令がないのが不思議になるんだよな。