本日の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言語にローテート命令がないのが不思議になるんだよな。