トップページ

本棚


両手で1000まで数えられますか?:2進法の話
数値 - 危険物取り扱い注意
100 × 200 =32?:変数のオーバーフローの話
パリティビット
小数の扱いについて
ぽいんた
ぽいんた2
ぽいんた3
ジ・オリジン
ジ・オリジン:補足
かっこつける話
かっこつける話2
文字列のこと
タイミングの話
拡張性の話
取り込む話
staticな話

コンパイルの話1
コンパイルの話2:止まらぬビルド
コンパイルの話3:マシン語に落ちるということ1:メモリの話
コンパイルの話4:マシン語に落ちるということ2:最適化
コンパイルの話5:マシン語に落ちるということ3:変数とスタック
コンパイルの話6:コンパイラはそもそも何をやってくれるのか??
リンクの話
プリプロセッサの話

OS、というもの

オブジェクト指向1
オブジェクト指向:2
オブジェクト指向:3

オブジェクト指向:番外 C言語のソースファイルの話
オブジェクト指向:番外 C言語での「再利用性」と「カプセル化」データ構造とアルゴリズム


抽象的な話

寝込んで布団の中で考えたこと
こんなの、常識??
お仕事プログラミング
ソフトでハードなプログラム
プログラムするということ
お勉強
プログラムを学ぶということの補足
C言語:「学問」と「実務」
統合開発環境
C言語ってポータブルですか?
C言語ってポータブルですか?:2
あなたは、どう読みますか?
ああ勘違い
試してガッテン
低級品
質問をするということ
ポカ
「何もしない」 != 「無駄」
エディタの話
もっと手を抜こう

いまどきの、アセンブラ

VisualStudio2005
VisualStudio2005:2

戦争の防ぎ方、に対する私の考え
身近な差別
改革
地球に優しいなんて大嘘
統計で嘘をつく方法

言葉について
言葉について:2

神が死んだということ
善悪の彼岸から、力への意思を目覚めさせるということ

本を読むということ
本を読むということ:2

絵を描く話
地図
地球儀

オカルトのお話
がんだむさん
RPGソフトウェア
記紀神話の不思議



メニュー

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

というわけで(どういうわけだか)タイミングの話。

趣味などで一人でプログラミングしていたりすると、なかなか判りづらいかも知れない。

マルチスレッドあるいはマルチタスク環境においてプログラミングする場合、同時並行的にいくつもの処理が走るため、同期というものに気を使う必要性が出てくる。

特に、システムの起動と終了のタイミングはシビア。

例えばファイル管理タスクが先に落ちた後で他のタスクがファイルを読み書きしたいと思うと、そこで処理ができなくてフリーズする。通信タスクが初期化完了する前に通信を行おうと思うと待たされ、その間他のタスクやシステムへの応答ができなくなる。

Windowsみたいにマウスが砂時計になっても許してもらえる環境ならそれでもいい(でもできたらやめてほしい・・・)けど、組み込みの場合はかなり致命傷である。家電で、「しばらくお待ちください」なんて頻繁に出るようなの、誰が使ってくれるのか?


また、フリーズしないまでもタイミングによる「行き違い」も多発する。

起動や電源断などのシーケンス処理中などは、結構このあたりがシビアとなってくる。オプションなどの装着状態を管理するタスクより先にそのオプションの装着状態をみて初期化の処理分岐のあるタスクが立ち上がってしまうと、せっかくオプション機器がついているのに認識しない、なんてことになってしまう。

また、例えばMDやCDなどのカバーの開けたり閉めたりをパカパカ繰り返したりすると、その状態の通知と実際の状態にタイムラグが生じたりすることもある。スイッチを連打することで機器の状態がチャタリングをおこしたり。


したがって、組み込みでプログラミングするときは、自分が担当している部分の処理だけでなく、ターゲット全体の構成やタイミングが重要になってくる。タスクの処理をシーケンス図にしたり、場合によってはタイミングチャートをおこしたりしなくてはならないこともある。

ところが、以外にタイミングチャートやチャタリングに対する対策って、知らない人が多い。組み込みの世界でも、アプリ層と呼ばれる部分を作ってる人って、PCのプログラムを作る感覚でやってたりする。

タイミングチャートやチャタリング除去などは、機器の本当の下回りでは日常的なものなのだけど、アプリ層ではそういった部分に触れることってあんまりないからだ。通信なども機器内のIC同士の通信やネットワーク通信など、ほとんどドライバ層が吸収してくれるのである。

しかし、そのようなプログラミングしかしていない人は、やはり上記のようなタイミングによる不具合に弱い気がする。原因をつかむのにも時間がかかっているし、原因をつかめてもうまく図にしたりできずにまとめるのに時間がかかっていたりする。チャタリングなどという言葉を知らなかったりするし、タイミングチャートは知らないことはないまでも、うまくわかりやすい図にならなかったりする。

こんなとき、一度だけとはいえ、本当の下回り、OSもC言語もないシステムの経験があってよかったと思う。

CPUが起動するときどのような処理をするか、ハードウェアキーを押されたときのチャタリングノイズの除去、I/Oポートを使って自前でタイマや場合によってはNOP命令などでタイミングを計って通信するやり方など、実作業面でのノウハウも大きいとは思うが、知識や応用力といった面でずいぶんと力になっている。


プログラミングって、「C言語ができます」とかじゃない、って言うのはまさにそこだと思う。




| 新しいページ | 編集 | 差分 | 編集履歴 | ページ名変更 | アップロード | 検索 | ページ一覧 | タグ | RSS | ご利用ガイド | 管理者に問合せ |
@wiki - 無料レンタルウィキサービス | プライバシーポリシー