「タイミングの話」(2005/12/22 (木) 22:34:38) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
というわけで(どういうわけだか)タイミングの話。
趣味などで一人でプログラミングしていたりすると、なかなか判りづらいかも知れない。
マルチスレッドあるいはマルチタスク環境においてプログラミングする場合、同時並行的にいくつもの処理が走るため、同期というものに気を使う必要性が出てくる。
特に、システムの起動と終了のタイミングはシビア。
例えばファイル管理タスクが先に落ちた後で他のタスクがファイルを読み書きしたいと思うと、そこで処理ができなくてフリーズする。通信タスクが初期化完了する前に通信を行おうと思うと待たされ、その間他のタスクやシステムへの応答ができなくなる。
Windowsみたいにマウスが砂時計になっても許してもらえる環境ならそれでもいい(でもできたらやめてほしい・・・)けど、組み込みの場合はかなり致命傷である。家電で、「しばらくお待ちください」なんて頻繁に出るようなの、誰が使ってくれるのか?
また、フリーズしないまでもタイミングによる「行き違い」も多発する。
というわけで(どういうわけだか)タイミングの話。
趣味などで一人でプログラミングしていたりすると、なかなか判りづらいかも知れない。
マルチスレッドあるいはマルチタスク環境においてプログラミングする場合、同時並行的にいくつもの処理が走るため、同期というものに気を使う必要性が出てくる。
特に、システムの起動と終了のタイミングはシビア。
例えばファイル管理タスクが先に落ちた後で他のタスクがファイルを読み書きしたいと思うと、そこで処理ができなくてフリーズする。通信タスクが初期化完了する前に通信を行おうと思うと待たされ、その間他のタスクやシステムへの応答ができなくなる。
Windowsみたいにマウスが砂時計になっても許してもらえる環境ならそれでもいい(でもできたらやめてほしい・・・)けど、組み込みの場合はかなり致命傷である。家電で、「しばらくお待ちください」なんて頻繁に出るようなの、誰が使ってくれるのか?
また、フリーズしないまでもタイミングによる「行き違い」も多発する。
起動や電源断などのシーケンス処理中などは、結構このあたりがシビアとなってくる。オプションなどの装着状態を管理するタスクより先にそのオプションの装着状態をみて初期化の処理分岐のあるタスクが立ち上がってしまうと、せっかくオプション機器がついているのに認識しない、なんてことになってしまう。
また、例えばMDやCDなどのカバーの開けたり閉めたりをパカパカ繰り返したりすると、その状態の通知と実際の状態にタイムラグが生じたりすることもある。スイッチを連打することで機器の状態がチャタリングをおこしたり。
したがって、組み込みでプログラミングするときは、自分が担当している部分の処理だけでなく、ターゲット全体の構成やタイミングが重要になってくる。タスクの処理をシーケンス図にしたり、場合によってはタイミングチャートをおこしたりしなくてはならないこともある。
ところが、以外にタイミングチャートやチャタリングに対する対策って、知らない人が多い。組み込みの世界でも、アプリ層と呼ばれる部分を作ってる人って、PCのプログラムを作る感覚でやってたりする。
タイミングチャートやチャタリング除去などは、機器の本当の下回りでは日常的なものなのだけど、アプリ層ではそういった部分に触れることってあんまりないからだ。通信なども機器内のIC同士の通信やネットワーク通信など、ほとんどドライバ層が吸収してくれるのである。
しかし、そのようなプログラミングしかしていない人は、やはり上記のようなタイミングによる不具合に弱い気がする。原因をつかむのにも時間がかかっているし、原因をつかめてもうまく図にしたりできずにまとめるのに時間がかかっていたりする。チャタリングなどという言葉を知らなかったりするし、タイミングチャートは知らないことはないまでも、うまくわかりやすい図にならなかったりする。
こんなとき、一度だけとはいえ、本当の下回り、OSもC言語もないシステムの経験があってよかったと思う。
CPUが起動するときどのような処理をするか、ハードウェアキーを押されたときのチャタリングノイズの除去、I/Oポートを使って自前でタイマや場合によってはNOP命令などでタイミングを計って通信するやり方など、実作業面でのノウハウも大きいとは思うが、知識や応用力といった面でずいぶんと力になっている。
プログラミングって、「C言語ができます」とかじゃない、って言うのはまさにそこだと思う。
表示オプション
横に並べて表示:
変化行の前後のみ表示: