オルタナティブ・ブログ > mtaneda ブログ >

中小企業の開発者は会社で何をしているのか

重いループを常に実行したら・・・

»

8ビットマイコンの通信処理が、全然関係ない(と考えていた)バグを修正したら、
顕著に重くなるという現象が発生しました。

原因は、通信と関係ないと考えていた、ある値の合計値の格納先を8ビット変数から16ビット変数に変更したことでした。

このループは、60回(1分間の間の値の合計をとりたいので)まわるのですが、
合計した値は、バグでも無い限り255を超えることはありません。
そのため、最初は8ビット変数だったのですが、
いろいろと見直しているうちに、オーバーフローしたら問題になるかもしれないので、16ビット変数にしておこうという安易な修正をしてしまいました。

しかもこの処理は、不要なタイミングでも常に回っていたため、
16ビット演算になって処理が重たくなったら、ディスパッチャの他の処理の実行に割かれる時間が減ってしまい、
通信処理がめちゃくちゃになってしまいました。

改めて8ビットマイコンにとって16ビット演算は重い処理だと実感したと共に、
安全を確認して変数を8ビットに戻し、
不要なタイミングでループをまわらないようにして、とっても良い感じになりました。 

Comment(0)