わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

2007年10月10日〜11日

「組込み機器」の判定方法

前回の授業で,組込み機器や組込みOSというのを取り上げましたが,それを整理する形で,何があれば組込み機器であるかの判定方法を説明しようと思います.
条件が二つありまして,どちらも満たさないといけません.
まず,基本となる機能は,コンピュータ制御がなくてもできるものとします.機械的・電気的制御はあってもかまいません.
その上で,機器にマイクロコンピュータ,あるいはコンピュータ制御,を“組込む”ことで,より高性能・高機能・柔軟な動作を実現しているものが,組込み機器です.
例えば,「電話」というのは基本的に電気信号です.まあフックを取ったり外したり,ボタンを押したり,昔はダイヤルを回すだったんですが,そこには機械的な機構もありますけどね.ともあれ,電話機そのものは,コンピュータは不要です.そして「携帯電話」は,その電話機にマイクロコンピュータが組み込まれたものです.間違いなく,組込み機器です.
次に,「液晶プロジェクタliquid-crystal projector」を考えてみましょう.もともとの機能というのは,映写です.原始的なものは,光を使って,スライドを映し出すものでしたから,やはりコンピュータはありません.そして,パソコンの出力をつないで映写するという機能にしたときに,表示の位置や光の加減を微妙に変えるとか,ユーザからの操作を受け付けてその加減を変えるとか,というのに,コンピュータ制御が使われています.なので,液晶プロジェクタも,組込み機器です.
iPod」はどうでしょうか.iPodは製品名,すなわち固有名詞で,普通名詞としては「MP3プレーヤ」と呼ばれます.音楽プレーヤは,音を鳴らすというのが基本的な機能です.旧式のカセットレコーダでもいいし,持ち運び型だとウォークマン*1を連想してくれるといいのですが,巧妙な機械仕掛けがありますが,それらはコンピュータ制御ではありません.しかし,MP3のファイルを読み出して,適切な音質,音量で再生し,ロックっぽい音とかジャズっぽい音とかに音質を微調整をすることもできる,となると,コンピュータ制御が不可欠になります.ということで,解体して中身を見なくても,iPodを始めとするMP3プレーヤもまた,組込み機器と推定できるわけです.
組込み機器のように思えるものを,取り上げてみましょう.ワイヤレスマウスです.私が持っているのも,ワイヤレスマウスの一種です.レーザポインタつきですけどね.PowerPointのページを,前や後ろに動かすのに使っています.
マウスというのは,玉の移動とか,光学式マウスだったらレーザによる,物理的な情報を,電気信号に変えて,パソコン本体に送るのが,基本的な機能です.ワイヤレスマウスは,その電気信号を,微弱な電波にして本体に送ります.さてこの中に,コンピュータ制御はあるでしょうか? なくてもできそうです.高性能高機能を謳い,マイクロコンピュータを組み込んでいるワイヤレスマウスも,世の中にあるかもしれないし,将来的にはそれが当たり前かもしれませんが,現状,そして総称としてのワイヤレスマウスは,組込み機器とは認めがたいものです*2
なお,パソコンというのは,その基本機能においてCPUが不可欠なので,組込み機器ではありません.ノートPCも同様です.ただし,計算することだけであれば,バベッジ解析機関などは,機械のみによる計算機だったのですけどね.
最後に,先週の小テストで,この講義室の組込み機器として解答の多かった,「エアコン」「クーラー」「空調」について,これが組込み機器かどうか,検討しましょう.
その前に抑えておきたい機器として,電気ゴタツがあります.原始的な電気ゴタツは,組込み機器とはみなされません.熱くなりすぎると自動的に切れ,またしばらくすると温まりますが,これは,熱で膨張するときの膨張率が異なる二つの金属をくっつけて…バイメタルというのですが…熱くなると金属が伸びるのですが,金属によって伸びが違うために金属が曲がり,曲がることでスイッチを切る,という仕組みになっています.このように,温度管理には,必ずしもコンピュータ制御は使われません.
それでエアコンについて,温度調節できるというだけならコンピュータ制御がいらないことに注意して,その上で,…,これ,解体しないと,マイクロコンピュータが組み込まれているかどうか,私にはちょっと分かりません.液晶で温度表示をするだけでは,そこにマイクロコンピュータがあると断言できません.ただまあ,組み込まれているような気もするんですけどね.

ポインタ変数のポインタ渡し

getaddrinfo*3は,引数が多くて大変ですが,一つ一つ見ていけば,そんなに難しくありません.
(中略)
最後の引数ですが,型は,struct addrinfo **です.構造体のポインタのポインタです.
これ,呼び出す際には,あらかじめstruct addrinfo *result;のように,構造体のポインタになる変数を用意しておきます.このポインタ変数resultの初期値,すなわちあらかじめどこを指しているかについては,何でもかまいません.
そして,getaddrinfo関数を呼び出す際に,最後の引数に「&result」と書きます.型名を確認しますと,resultがstruct addrinfo *型だから,&resultは,それにさらに*をつけた,struct addrinfo **型になり,関数宣言の型と一致します.
そして,関数が正しく動作し,情報が作られれば,その結果は,resultが参照するようになります.これは,関数の中で間接的に*4,resultの値が書き換えられます.
ここに,ポインタ変数のポインタ渡しという手法がとられています.
こんな関数を皆さんも将来,作ることになるかは分かりませんが,なぜこのやり方でうまくいくのかを理解するのは,それほど難しくありません.scanfの応用なのです.あの関数を使うときに,変数名の前に「&」をつけるよう教わり,そしてポインタや,関数を通じた値の受け渡し方を学びながら,その意味を理解していったはずです.ここも同じです.変数の前に「&」をつけて呼び出せば,関数の中で,その変数の値を変えてくれるということです.

*1:授業を聴いていた大学1〜3年生は,実物を見たことあるかな…?

*2:ワイヤレスリモコンは? ボタンを押してテレビなどに指示するだけのものは該当しませんが,多機能リモコンについては,これも組込み機器と言っていいでしょう.

*3:「げっとあどれいんふぉ」と呼んでいました.

*4:getaddrinfoの最後の仮引数の変数名をresとすると,「*res = struct addrinfo *型のポインタ値;」に相当する代入がなされているのです.