エンベデッドシステムスペシャリスト

作成日:2002-04-20
最終更新日:

エンベデッドシステムスペシャリストとは

エンベデッドシステムスペシャリストとは、IPA (独立行政法人 情報処理推進機構)によれば 「高度IT人材として確立した専門分野をもち、 組込みシステム開発に関係する広い知識や技能を活用し、最適な組込みシステム開発基盤の構築や組込みシステムの設計・構築・製造を主導的に行う者」 である。

昔のこと

所属でのこと

わたしがプログラマとして仕事を始めたのは、実は組込みシステムを作るためだった。

1986 年 4 月、私は入社2年目になっていた。入社1年目のテーマが自分の性に合わず、上司を困らせてしまったため、配置替えとなったのだった。 そこで私が取り組むことになったのは、ある種の画像処理をするための機械を作る、というテーマだった。同じ部の違う課の先輩が主導し、 私が後を追うというやり方だった。

組込みシステムを作るといっても、まず画像処理をやったこともない。まして組込みシステムなどどのように作ればいいかがわからない。 私は先輩のいうがまま、いろいろと動いていった。そして試作品ができたのが数年後であった。

私たちが作った組込みシステムは、ソフトウェアのみのいわゆるエンタープライズに非常に近かった。リアルタイム OS は市販のもの OS-9 を使い、 それぞれの部品は VME バスで規格化されたボードで間に合わせた。 プログラムは K-R 時代の仕様だった C 言語で作っていた(一部アセンブリ言語も使った)。 とはいえ、 OS の立ち上げ部分は ROM に書き込んだし、インターフェースも 5 x 5 の配列のボタンを配置してそれなりに動くものだった。

試作品はその後、別の会社で商品化され、数十台ではあったが販売された。どんな商品だったかということはここでは申し上げられない。

社内でのこと

私がいたのは研究所であった。当然、社内には現場があって、商品を作っている。その現場では商品を作るための機械があり、その機械を動かすための電気があり、 機械を制御するための計装がある。計装ということばはなじみがないと多いと思うが、計測するためのセンサや制御するためのアクチュエータ、 これらをまとめるためのシステムの装備という意味で、工場では普通に使う。さて、現場でまず設計されるのは機械である。次に設計されるのは電気である。 最後の設計は計装である。したがって、機械でうまくできなかったツケが電気におよび、電気でも処理できなかったツケが計装に波及する、 と工場の計装担当者は不満を言っていた(ような気がする)。

今のこと

今は IoT の時代といわれる。私自身は勤務先ではプログラミングすることはめったにないが、間接的にいろいろなシステムについて知る立場にある。 たまたま、IoT に関するシステムに少しだけかかわることがあった。 そこで、組込みシステムについても理解しておくとよいと思い、受験を決めた。

再読み込みするたびに、過去の午前 2 の問題からランダムに1題を表示する。 選択肢の順番もランダムにしている。

エンベデッドシステムスペシャリストの勉強

過去の問題を見て悪態をつくことにした。

観光案内用ロボット

設問1
(1) LCD の表示データを情報サーバから取得する場合, 情報サーバがデータ転送を開始してから, LAN コントローラが表示バッファへの書き込みを完了するまでの時間は何ミリ秒か。 答えは小数第2位を四捨五入して,小数第1位まで求めよ。 ここで, 表示データを LAN で転送する際の実効転送速度を 40M ビット/秒, LAN コントローラから表示バッファへの実効転送速度を 80M バイト/秒とし, 1M=10^6 とする。 また,表示データは圧縮されていないものとし, ソフトウェアの処理時間及び情報サーバ内の処理時間は無視できるものとする。

解答までの悪あがき:一つ一つ落とし穴が潜んでいそうですね。まず、書き込みを完了するまでの時間を聞かれているが、 どう答えればいいのかわからない。速度はわかるが、運ぶものがわからなければ時間の出しようがない。

最近の子供たちは速さの計算が苦手で、マルは、マルじ、マルき、のような符丁を使うのだという。は、は速さ、じ、は時間、き、は距離だ。 結局符丁を覚えても関係がわからないからどれとどれをかけて割ったらいいのかがわからないのだそうだ。 おれも他人のことは言えない。電流と電圧と抵抗の関係がわからなかったからだ。

さて、何を運ぶかを調べよう。設問の「ここで……」以下に着目する。表示データを転送する際の、という記述から、表示データを転送することがわかる。 では表示データは、どの程度の容量があるのだろう。「表2 制御部の主な構成要素」の「表示コントローラ」の個所に、 「・LCD の表示は,1画素が 16 ビットで,1 画面が 500,000 画素で構成される。」とある。 だから、この1画面の容量が送るデータ量に違いない。まず注意すべきは、転送は2段階で行われるということだ。 第1段階はLANにより情報サーバから制御部のLANコントローラにデータを転送するところ、 第2段階は制御部のなかで、LANコントローラから表示コントローラにデータを転送するところだ。 第1段階のデータを見積もろうは、データが 1 画素あたり 16 ビット で 全部で 500,000 画素だ。ビットとバイトが混在しているのはいやらしいので、 バイトに換算する(そのほうがよい)。さて、ここでは 1 バイトは 8 ビットである(なぜなら、1 バイトは 10 ビットで計算しろ、という指示がないからだ)。 だから、1 画素 2 バイトならば 500,000 画素ならば全部でデータ量は 1,000,000 バイトである。 ここで、1 M = 10^6 の指示があるので 1,000,000 バイト = 1 M バイトとしてよい。(そうでなければ、1.024 M = 10^6 で換算するなどの可能性もある)。 第1段階の実効転送速度は 40M ビット/秒である。これもバイトになおしれ、 40M ビット/秒 = 5M バイト/秒である。 1秒に5Mバイト転送できるのだから、1Mバイトの転送には 0.2 秒 = 200 ミリ秒かかる。これが第1段階。
第2段階は実行速度 80 Mバイト/秒だから、1Mバイトの転送には、1/80 = 0.0125 秒 = 12.5 ミリ秒である。答えは小数第2位を四捨五入して、 小数第1位まで求めよである。たまたま小数第1位まで割り切れたから、200 + 12.5 = 212.5 ミリ秒である。

もしこの第1段階と第2段階が一部パイプライン方式になっていたら、少しは表示時間が短くなる可能性がある。とはいえ、両者の速さが桁違いなので、 実際にはほとんど影響はないだろう。

設問1
(2) 体の正面をモータの0度の位置に設定していない。その理由を 35 字以内で述べよ

これは表3を見ればよい。0度の状態を正面にしておくとモータは反時計回りにしかいかないからだ。 デューティ比をマイナスにするわけにはいかない。これを認識した上で図2を見ると、もし正面を0度に設定してしまったら、体が向かって右側にしかいかない。 だから、回答としては、「ロボットが向かって左側にも回転できるようにするため」とするのが私の案である(25字)。 IPAの解答例は「体の正面を0度にすると、体が正面から右方向に回らないから」とある。 同じことをいってはいるが、あえて私が違った表現にしたのには理由がある。一つは、否定的な言い方を避けるためだ。「…しないように」というより、 「…できるように」というほうがわかりやすいと私は思う。もう一つは、IPA解答例はロボット側からの表現で、ロボットが右側を向くとしているが、 人がいる方向に向けるわけだから、人が主体と思いたい。そこで「向かって左」というように、人が主体となるように言い方を変えた。 与件が「0度の位置に設定しない」といっているのだからそれを解答で繰り返すのは次数もったいない。

設問2
(1) 体をモータの 200 度の位置で停止させる場合、理想的な PWM 信号のデューティ比はいくらか。既約分数で答えよ。

設問2
(1) 体をモータの 200 度の位置で停止させる場合、理想的な PWM 信号のデューティ比はいくらか。既約分数で答えよ。

 180 度ではデューティ比 1/2, 240 度ではデューティ比 2/3 であることから、これを比例配分すればよい。 60 度すすめるときにデューティ比が 1/6 増えるのだから、20 度進めるときには 1/18 増えるはずである。 そこで 200 度のときのデューティ比は 1/2 + 1/18 = (9 + 1) / 18 = 10 / 18 = 5 / 9 となる。

(1)(b) タイマを使用して,体をモータの 200 度の位置に最も近い停止位置で停止させる PWM 信号を出力するタイマの設定値(周期、High の値)を, 十進数で答えよ。 また,そのときの誤差は,何度になるか。誤差の答えは,小数第3位を四捨五入して,小数第2位まで求めよ。

以下は誤った解答である

タイマの設定値はどこに書いてあるだろうか。表2を見ると構成要素タイマの欄で、 「240 KHz のクロックでカウントアップする 10 ビットタイマで,タイマ出力の周期及び High の幅を設定できる」とある。 これを何の先入観もなく考えてみよう。10 ビットということは 1024 のカウントができる。ということは、5 / 9 ≒ x / 1024 を満たす x を求めればよいだろう。 もちろん、x は整数であるから近似的に求めるしかない。 x = 1024 * 5 / 9 = 5120 / 9 = 568.8888… である。一番近い数字なので(切り捨てとか切り上げとかではない)、 タイマの設定値は 569 だ。そのときの角度の誤差を求めるにはどうしたらよいか(誤差は,何度になるか、と尋ねられているから)。 360 度 を 1024 のカウントで制御しているわけだから、1 カウントあたり 360 / 1024 度動くわけだ。 したがって、誤差をカウントで勘定すると 569 - 5120 / 9 = 1/ 9 = 0.1111…となるので、 1 / 9 * 360 / 1024 = 40 / 1024 = 5 / 128 ここでまじめに割算を計算するのはしんどい。500 / 128 は 384 / 128 と 512/ 128 の間にあるわけで、四捨五入すると 4 に近い。だから、5 / 128 ≒ 0.04 でいいのかな。

以下が正しい解答である。

表1の構成要素にあるサーボコントローラの機能概要には「入力される1ミリ秒周期のアクティブ High の PWM 信号によって……」とある。 とあるから、PWM 信号の周期は 1 ms である。これと 240 kHz のクロックとを結びつけないといけない。タイマ出力される PWM 信号を 1ms 周期とするには、 分周する必要がある。周期が 1ms の周波数 1kHz だから、クロックを 240 分周すればよい。求める周期は 240 である。 High の値は 5/9 = x/240 だから x = 240 * 5 / 9 = 133.333 …… そこで High の値は 133 s。誤差は 0.333 …… / 240 = 360 = 0.5 (degree)。

私の誤りは、タイマの設定値である周期からきている。文章をよく読まないとね。

(2) 体の回転を次のように制御している。たとえば,体を正面の位置からモータの 150 度の位置に最も近い位置まで回転させるときに, 20 ミリ秒ごとに, 1 ずつ減算した値を High の幅の設定値に設定して,停止位置がモータの 150 度の位置に最も近いデューティ比になるように制御している。 その理由を,ロボットの動作の観点から,40 字以内で述べよ。

私には問題文に書かれていることが何のことかがわからない。そこで立ち止まって考えてみた。 まず、180 度の位置から、150 度の位置に最も近い位置(以下近似位置という)に回転させるときに、要する秒数はいくらか。 問題で与えられている条件は、デューティ―比率で示される位置までの各速度は、0.3 秒に1回転である。 これをそのまま適用すると、30 度 は 360 度 の 1/12 だから、 ここで 150 度の近似位置までの所要秒数は 0.3 / 12 = 0.025 (s) = 25(ms) である。 これでは「ロボットの動作の観点から」速すぎる、というのが正直な感想である。だから、きっと制御の内容は角速度を抑えるということに違いない、 と想定する。

このような想定をもとに問題文に書かれていることを読み解く。まず、20 ミリ秒ごとに、ということは逆にいえば 20 ミリ秒の間は設定値を変えないということである。 次に 1 ずつ減算した値というのは,High の値のことであろう。まず最初は 240 の半分だから 120 である。これを 20 ミリ秒後に 119 にして、 さらに 20 ミリ秒後に 118 にして、…… というように段階的に減らすことを言っている。目標値は 150 度の位置だから High の値が 150 * 3/4 = 112.5 になるまで(実際には113 か 112 まで)繰り返す。 ということだ。この秒数は、112 とすれば 20 ms * 8 = 160ms である。あれ、0.16 秒後か、25 ms が 160 ms になるということか。

解答を見てみると計算は次の通りだ。PWM 信号が 1ms の場合に近似位置までの移動時間が 25 ms ということは、PWM 信号を 20ms にすれば 20 * 25 = 500 (ms) = 0.5 (s) だ。この方がすっきりしているな。じゃあ、先に自分の頭だけで書いたことは何だろう。

カメラつき防犯灯

設問1 (2) 1フレームの画像データを1Mバイトとしたとき,画像データの記憶に必要なフラッシュメモリの容量は全体で何Gバイトか。 答えは小数点以下を切り上げて,整数で求めよ。 ここで,圧縮すると元データの1%のデータ量になり,暗号化すると圧縮したデータの5%のデータ量が増加するものとする。 また,1Mバイト=106 バイト,1Gバイト=109 バイトとする。

問題の要件を整理すると次のようになる。(1) カメラユニットは,1秒間に4フレームの画像を撮影する。(2) 圧縮された画像データが 6 分間分蓄積されると, PC から設定された暗号キーを使用して暗号化する。暗号化した 6 分間分のデータは,一つのファイルとしてフラッシュメモリに記憶し, 240 時間保存される。

これを素直に計算しよう。まず 6 分間の生データは 1 (MB/frame) * 4 (frames/sec) * 60 (sec/min) * 6(min) = 1440 * 4 (MB/file) である。 このファイルを圧縮すると 1 % になり、さらに暗号化するのであるから、1440 * 0.01 * 1.05 = 14.4 * 1.05 (MB / file) となる。

ここではあえて計算はこれ以上しないでおく。さて、このファイルは 240 時間保存されるのであるから、一つのフラッシュメモリにはファイルがいくつ記憶されるのか、 というと、6 分間に1 ファイル → 60 分(1時間)に 10 ファイル → 240 時間に 2400 ファイルである。 従ってファイルの総容量は、(3.6 * 1.05) (MB / file) * 2400 (files) である。2400 は 2.4 * 103 であるから、 整数部分は 14.4 * 1.05 * 2.4 を計算し、切り上げればよい。14.4 * 2.52 = (25.2 + 10.08 + 1.008) = 36.288 → 37

以上は暗算だけでやってみた。これは IPA 公表の値と一致している。

複数の駐輪場を管理するシステム

計算問題はない

カーオーディオシステム

設問3 音楽の再生機能について,(1), (2) に答えよ
(1) スマートフォンの音楽再生に関する次の記述中の [ e ] ~ [ g ] に入れる適切な字句又は数値を答えよ。
USB 通信クロックと DAC への転送クロックは,生成の基になる発信子が異なるので周波数差がある。 そのため,受信した PCM データのバッファリングを行なわないと,データの [ e ] 又は [ f ] が発生する。 そこで,図 2 の四つのバッファを使用し,バッファ 2 段目まで PCM データを蓄積したところで DAC 送信を開始することによって, 1 曲ごとに周波数差を吸収している。
周波数差が最大 0.01 % の場合,5 分間の音楽を再生するために必要なバッファ 1 段当たりのサイズは,最小 [ g ] バイトである。 ここで,DAC 送信中のバッファに書き込みできるものとする。

[ e ] や [ f ] に相当するのは何だろう。「漏れ」や「抜け」と書きたいがそれで許されるのか。 [ g ] の計算はややこしそうだ。考えてみよう。サンプリング周波数は 192 kHz とあるから、これを使う。 基準となる 192 kHz の周波数差が最大 0.01 % であるから、その周波数差は 0.0192 kHz = 19.2 Hz である。5 分間にこれだけずれるということは、 余分にもたないといけないバッファのサンプリング数は、19.2(サンプル/sec) * 60(sec/min) * 5(min) = 5,760(サンプル)となる。

ここまで来て、立ちいかなくなった。図 2 の四つのバッファがあるのだが、このバッファ 1 つあたりの容量は 1,000 サンプル分なのだ。頭のなかで?が渦巻く。

参考書の解答を見てもう一度考えた。まず、[ e ] と [ f ] にはそれぞれ「アンダーフロー」と「オーバーフロー」が入る(順不同)。

次に計算だ。まず誤解していたのは、バッファには周波数でサンプリングしたデータすべてを入れる必要はなく、 周波数差に対応するだけのデータを入れればよいということだ。もう一つ注目すべきは、たいていの計算問題の注記にある「小数点以下を四捨五入する」 などの近似方法に関する指示がないことだ。ということは小数点は出ないだろう(問題文を信用することがいいとは必ずしもいえないが)。

ここまで考えたのだが、5760 サンプルはあっている。情報量だが、1サンプルあたり量子化ビット数 32 ビット、2 チャンネル (ステレオ) ということで、 合わせて 64 ビット = 8 バイトである。したがって、5 分間全部で 5,760 * 8 バイトとなるが、これを2つのバッファで等分にする必要があるので、 5,760 * 8 / 2 = 5,760 * 4 = 20,000 + 2,800+ 240 = 23,040 バイトが答えだ。むずいなあ。

(2) USB メモリ内の圧縮音楽ファイルの再生時,伸張処理以外の処理負荷を考慮し、表1の伸張タスクの CPU 占有率を50%以下にしたい。 そのためには,伸張処理1回あたりの伸張タスクの処理時間は何ミリ秒以下でなければならないか。 答えは小数第3位を四捨五入して,小数第2位まで求めよ。 ここで,サンプリング周波数 192 kHz のサイクル時間は,5.20 マイクロ秒とする。

まず、1回の伸張処理ごとに 1,000 サンプル分の PCM データを生成する。だから、1回の所要時間は 5.20 ミリ秒である。 この50%以下にしたいのだから、2.60 ミリ秒が答えである、と思うが、こんなに計算量が少なくてよいのか?

よいようだ。

食券自動販売機

設問1 (1), (2) 省略
(3) 制御部からは三つのユニットにそれぞれ 100 バイトのデータを送信し,三つのユニットからは制御部にそれぞれ 20 バイトのデータが送信される。 このとき,制御部が 100 ミリ秒の通信周期内の最後のデータを受信してから,次にデータ送信を開始するまでの間は何ミリ秒か。 答えは小数第2位を四捨五入して、小数第1位まで求めよ。ここで,シリアルバスの通信速度は 100 k ビット/秒, 1バイトは10ビット,1k は 103とする。 また,各ユニットは制御部から送信されるデータを全て受信した後,500 マイクロ秒の処理を行ってから応答データの送信を開始し, 制御部は各ユニットから送信されるデータをすべて受信した後,100 マイクロ秒の処理を行ってから次のユニットへの送信を開始するものとし, 制御部の送信処理時間は無視できるほど小さいものとする。

制御部がある一つのユニットに 100 バイトのデータを送信すると、そのユニットは 500 マイクロ秒の処理を行ってから 20 バイトのデータを制御部に送り返す。 次のユニットに別の 100 バイトを送信する前には 100 マイクロ秒の処理を行なう必要がある。以上を式に表すとこうなる。

[100 (Byte) / 100(k bit/sec) + 0.5 (msec) + 20 (Byte) / 100(k bit/sec)] + 0.1 (msec) + [100 (Byte) / 100(k bit/sec)+ 0.5 (msec) + 20 (Byte) / 100(k bit/sec)] + 0.1 (msec) + [100 (Byte) / 100(k bit/sec)+ 0.5 (msec) + 20 (Byte) / 100(k bit/sec)]

最後に 0.1(msec)がないのは、次の送るユニットがないためだ。これらを計算すると、[ ] 内は 10.0 ms + 0.5 ms + 2.0 ms = 12.5 ms となる。 よって式は 12.5 (ms) * 3 + 0.1 * 2 (ms) = 37.5(ms) + 0.2(ms) = 37.7 (ms) となるが、計算間違いはないだろうか。

これは誤りである。今求めたのは、最初のデータを送信してから最後のデータを受信するまでの時間だ。 求める値は最後のデータ送信を終了後、次のデータを送信するまでの時間だ。1回の単位は 100.0 ms だから答えは 100.0(ms) - 37.7(ms) = 62.3 (ms)

省エネ対応の自動販売機

平成26年度午後 I 問 2 である。

設問1 自販機のシステムについて、(1)~ (3) に答えよ。
(1) (省略)
(2) 夜間は,補助 LED 照明を点灯する。このとき自販機は,時刻を基にどのようにして夜間と判断すればよいか。35 字以内で述べよ。

模範解答は、「日の出及び日没の時刻を年月日から計算し,時刻を基に夜間を判断する。」である。 ここで気になるのは、前半の文章である。日の出の時刻をどのようにして年月日から計算すればよいのだろう。 私はむしろ、1年365日(366日)の日の出と日没の時刻を表の形で対応付けて読みだすことを考えていた。 これを計算とは普通いわないだろう。計算というのは四則演算のことだと思うからだ。

さて、2015 年版の理科年表を見てみよう。暦31ページから暦42ページにかけて、 日本の47都道府県の都道府県庁所在地ほか48個所の「各地の日出入」が掲載されている (なお、東京は本土ではなく小笠原、北海道は札幌と根室の2か所)。 ここでは、1 月 1 日から10日おきの日の出と日没のデータがある。 だから、「10日おきの日の出と日没のデータを読みだして線形補間する」ということならば計算だろうが、 そこまで細かなことを求めるのではないだろう。

もう一つ、気になったのは日の出や日没は、各地によって異なるからだ。緯度も異なれば経度も違う。 それをひとくくりに計算というのはたまらないなあ。でも、この自販機には位置情報もGPSもないから、 各地により異なる日の出や日没を補正する機能を期待するのが無駄だろう。

それにしても解答例は少し物足りない。私ならこうしたい。35 字以内は厳しいがあえて常識となっていることまで書いた。 「年月日から日の出及び日没時刻を求め時刻が日の出前か日没後なら夜間と判断」

まりんきょ学問所コンピュータの部屋システムの部屋 > エンベデッドシステムスペシャリスト


MARUYAMA Satosi