新人技術者のためのロジカル・シンキング入門(6) ―― ハードウェア基礎の基礎
ハードウェアをブラックボックス(正しく動作して当然のもの)として設計を進めるソフトウェア技術者も少なくない.ここでは,システムとして最適化されたプログラミング,あるいはデバッグの際の切り分けを容易にするため,ソフトウェア設計者にとって必要なクロックや回路の初期化/リセット,電源供給など,ハードウェア(回路)の基礎知識をまとめる. (編集部)
技術解説・連載「新人技術者のためのロジカル・シンキング入門」 記事一覧
第1回 いかにしてバグの原因を突き止めるか
第2回 プログラミングにおける良いデータ構造
第3回 「必要とされる設計書」の作り方
第4回 直したバグがゾンビのごとく復活する
第5回 ソース・コード規約の作り方
第6回 ハードウェア基礎の基礎
第7回 「ひたすら流すだけのテスト」にさよなら
第8回 CPUの演算量をひたすら削る
第9回 メモリ転送速度の最適化設計
第10回 「工学の知」を実務に生かす
●お知らせ
本連載記事を元に加筆・再編集した書籍『組み込みエンジニアのためのロジカル・シンキング入門』が好評発売中!
Hさんのチームでは,この2週間ほど陰うつな日が続いています.なぜなら,1ヵ月ほどかけて行うはずだった結合の作業が,ここのところストップしているからです.
これからの工程では,今まで単体で実装やテストを行ってきたアルゴリズムを結合し,タスク構成を順次組み上げていく予定でした.しかし,あるアルゴリズムを結合したタスクを組み上げたとたん,システム全体が動かなくなることに気づきました.最初にこの現象に気がついたとき,割り込みが232回ほど入ったときに止まることがわかりました.次に試行すると185回の,さらにその次は286回の割り込みでシステムが止まりました.どうやら,止まるまでの回数にはあまり意味がなく,「途中で止まる」とだけ表現したほうがかえって正確なようでした.
工程の期限は刻一刻と迫っています.しかし,上記のタスクが一つあるだけで全体が動かなくなるのですから,タスク構成を組み上げるどころではありません.Hさんは「テスト項目消化数ゼロ」と書かれた進捗管理表を眺めながら,ため息を漏らしました.「先週もゼロと書いて進捗会議に出た記憶があるな.でも,テスト項目の中に例のアルゴリズムが結合されないで確認できる項目などないからな...」.
いろいろとデバッグを繰り返してHさんがたどり着いた結論は,「デバイス・ドライバとして提供されているライブラリ関数の仕様書をいくら眺めても答えが出ないらしい」ということでした.ライブラリ関数ではなく,その先で制御されているハードウェア回路の仕様書を確認していかないとどこに原因があるかがわからない,ということに気づいたのです.そうして,ようやく取り寄せたハードウェア回路の仕様書を見てHさんは目がチカチカしてきました.仕様書はすべて英語で書かれていて,全体が数百ページもあったからです.Hさんは2ヵ月前の新人配属を思い出して後悔しました.「しまった,帰国子女だとかいうIをこっちに配属させておけばよかった.あいつなら訳してくれたような気がする...」.
読者のみなさんはこういうケースでどのような切りわけ方法を考えられるでしょうか.もちろん,帰国子女だというだけの理由で数百ページの仕様書を翻訳させられたらたまったものではないので,「Iさんを呼んでくる」というのは解決策に含まれないのですが....
● 切り分けの全体像をつかむ
本連載の第1回で紹介した考えかたをもとに,上記のケースの原因ブロックを切り分けていくとすると,どこに着目するとよいでしょうか(図1).
本連載の第1回にならって,切り分けの全体像を考えてみる.タスクの中のアルゴリズムを削除した場合,動くか動かないかで大きく分けることができる.今回のケースではおもに下にフローが流れたときに着目.一つ一つ設定を確認するのだが,ソフトウェア技術者にはわかりにくいことも....
例えば,「アルゴリズムのせいか否か」で切り分ける,という考えかたが適応できそうです.つまり,アルゴリズムをダミーの転送処理に置き換えた場合でもシステムが止まるかとまらないかで,アルゴリズムそのものに原因があるのか,それを動かす周りの環境に原因があるのかを切り分けるというものです.ここでは,かりに図1の下半分のケース(アルゴリズムを動かす環境)に原因があるらしいことがわかったとしましょう.
続いて,ハードウェア回路の設定,ハンドラの実装など,一つ一つに問題がないかを確認していくことになります.
● ライブラリだけではすまないことも
ところが,そうしたハードウェアの設定を一つ一つ確認していく切り分け作業は,ソフトウェア技術者にとっては意外とやっかいな場合があります.というのは,ライブラリを使って組み上げた形で動かす方法は知っていても,一つ一つの回路がどのように設定されて動いているかを意識して使っていない人もいるからです.
近年,組み込み環境においてもライブラリ関数が提供され,アセンブラでデバイス・ドライバを組み上げなくてもよいケースが増えてきました.このことは開発効率を上げてくれるようにもみえますが,その反面,ハードウェアの設定がブラックボックス化されてしまい,切り分け作業が行いにくくなることもしばしば起こるのです.
そのようなソフトウェア技術者のために,今回はハードウェアの設定を対象とするデバッグの全体的な流れを解説することにします.
tag: 技術教育