応用情報技術者過去問題 平成24年春期 午後問7
⇄問題文と設問を画面2分割で開く⇱問題PDF問7 組込みシステム開発
オーディオプレーヤの組込みソフトウェアの設計に関する次の記述を読んで,設問1~3に答えよ。
G社では,ハードディスクを内蔵した携帯型のオーディオプレーヤ(以下,プレーヤという)の組込みソフトウェアを開発することになった。
プレーヤの本体には再生ボタン及び停止ボタンがある。再生ボタンを押すと,あらかじめハードディスクに圧縮して保存しておいた音声ファイルから,音声データを読み出して再生する。停止ボタンを押すと,音声ファイルの再生を停止する。 開発する組込みソフトウェアは,メインタスク,再生処理タスク,データ読出しタスク及びDSP(Digital Signal Processor)ドライバから成る。タスク間の通信にはメッセージを使用する。プレーヤの構成を図1に示す。
開発する組込みソフトウェアでは,再生中に音声が途切れるのを防ぐために,バッファメモリを使用する。音声ファイルを再生する際には,データ読出しタスクが音声データをバッファメモリに書き込む。再生処理タスクは,書き込まれた音声データを順次読み出し,DSPドライバに転送する。DSPドライバは圧縮されている音声データをDSPに供給して伸張する。伸張された音声データはスピーカーに出力される。〔バッファメモリの制御〕
バッファメモリの領域は,0~n-1のn個に等分割し,その一つ一つをメモリブロックとして取り扱う。バッファメモリへの書込み及び,DSPドライバへの転送は,メモリブロック単位で行う。
バッファメモリの制御の様子を図2に示す。pは,再生処理タスクが次に読み出してDSPドライバに転送するメモリブロックの番号である。pからm個のメモリブロックは使用中,それ以外のメモリブロックは未使用である。
データ読出しタスクの書込みと再生処理タスクの読出しのいずれも,メモリブロックの番号が 0 のメモリブロックから順に使用する。データ読出しタスクの書込み先のメモリブロックの番号が n-1 に達したら,次はメモリブロックの番号が 0 のメモリブロックを使用する。また,再生処理タスクが読み出すメモリブロックの番号も,n-1 に達したら,次はメモリブロックの番号が 0 のメモリブロックを使用する。〔ハードディスクの制御〕
電力消費を抑えるために,ハードディスクは読出し処理で必要なときだけディスクを回転させ,読出しが終わったら回転を停止させる。ハードディスクの制御に用いる関数を表1に示す。〔DSPドライバの制御〕
DSPドライバは,DSPを駆動する他,状況に応じて再生処理タスクにメッセージを送信する。DSPドライバの制御に用いる関数を表2に示す。〔組込みソフトウェアのタスク構成〕
開発する組込みソフトウェアのタスクの動作内容を表3に示す。各タスクには実行状態,待ち状態及び停止状態があり,実行権はラウンドロビン方式で与えられる。 再生処理タスクの流れ図を図3に,データ読出しタスクの流れ図を図4に,図3及び図4で使用しているサブルーチン Buffering(s,t) の流れ図を図5に示す。
なお,図3中の下線①の判定条件は,音声データの追加読出しを開始する条件である。また,図4中の mod は剰余の演算子で,a mod bはaをbで割った余りである。
G社では,ハードディスクを内蔵した携帯型のオーディオプレーヤ(以下,プレーヤという)の組込みソフトウェアを開発することになった。
プレーヤの本体には再生ボタン及び停止ボタンがある。再生ボタンを押すと,あらかじめハードディスクに圧縮して保存しておいた音声ファイルから,音声データを読み出して再生する。停止ボタンを押すと,音声ファイルの再生を停止する。 開発する組込みソフトウェアは,メインタスク,再生処理タスク,データ読出しタスク及びDSP(Digital Signal Processor)ドライバから成る。タスク間の通信にはメッセージを使用する。プレーヤの構成を図1に示す。
開発する組込みソフトウェアでは,再生中に音声が途切れるのを防ぐために,バッファメモリを使用する。音声ファイルを再生する際には,データ読出しタスクが音声データをバッファメモリに書き込む。再生処理タスクは,書き込まれた音声データを順次読み出し,DSPドライバに転送する。DSPドライバは圧縮されている音声データをDSPに供給して伸張する。伸張された音声データはスピーカーに出力される。〔バッファメモリの制御〕
バッファメモリの領域は,0~n-1のn個に等分割し,その一つ一つをメモリブロックとして取り扱う。バッファメモリへの書込み及び,DSPドライバへの転送は,メモリブロック単位で行う。
バッファメモリの制御の様子を図2に示す。pは,再生処理タスクが次に読み出してDSPドライバに転送するメモリブロックの番号である。pからm個のメモリブロックは使用中,それ以外のメモリブロックは未使用である。
データ読出しタスクの書込みと再生処理タスクの読出しのいずれも,メモリブロックの番号が 0 のメモリブロックから順に使用する。データ読出しタスクの書込み先のメモリブロックの番号が n-1 に達したら,次はメモリブロックの番号が 0 のメモリブロックを使用する。また,再生処理タスクが読み出すメモリブロックの番号も,n-1 に達したら,次はメモリブロックの番号が 0 のメモリブロックを使用する。〔ハードディスクの制御〕
電力消費を抑えるために,ハードディスクは読出し処理で必要なときだけディスクを回転させ,読出しが終わったら回転を停止させる。ハードディスクの制御に用いる関数を表1に示す。〔DSPドライバの制御〕
DSPドライバは,DSPを駆動する他,状況に応じて再生処理タスクにメッセージを送信する。DSPドライバの制御に用いる関数を表2に示す。〔組込みソフトウェアのタスク構成〕
開発する組込みソフトウェアのタスクの動作内容を表3に示す。各タスクには実行状態,待ち状態及び停止状態があり,実行権はラウンドロビン方式で与えられる。 再生処理タスクの流れ図を図3に,データ読出しタスクの流れ図を図4に,図3及び図4で使用しているサブルーチン Buffering(s,t) の流れ図を図5に示す。
なお,図3中の下線①の判定条件は,音声データの追加読出しを開始する条件である。また,図4中の mod は剰余の演算子で,a mod bはaをbで割った余りである。
設問1
表3中のa,bに入れる適切な字句を答えよ。
解答入力欄
- a:
- b:
解答例・解答の要点
- a:再生処理
- b:STOPメッセージ
解説
本体の停止ボタンが押され、音声ファイルの再生を停止するときの動作を考えます。
表3「タスクの動作内容」の再生処理タスクの説明には、「STOPメッセージが受信されていると、DSPドライバにDSPの動作停止を指示して、再生処理を終了する」という記述があります。この記述と、図1「プレーヤの構成」にてメインタスクから再生処理タスクへのメッセージの動線があることから、音声ファイルの再生を停止するときには、再生処理タスクにSTOPメッセージを送信すれば良いことがわかります。
よって、[a]には「再生処理」、[b]には「STOPメッセージ」が当てはまります。
∴a=再生処理
b=STOPメッセージ
表3「タスクの動作内容」の再生処理タスクの説明には、「STOPメッセージが受信されていると、DSPドライバにDSPの動作停止を指示して、再生処理を終了する」という記述があります。この記述と、図1「プレーヤの構成」にてメインタスクから再生処理タスクへのメッセージの動線があることから、音声ファイルの再生を停止するときには、再生処理タスクにSTOPメッセージを送信すれば良いことがわかります。
よって、[a]には「再生処理」、[b]には「STOPメッセージ」が当てはまります。
∴a=再生処理
b=STOPメッセージ
設問2
次にDSPドライバに転送するメモリブロックの番号が p,使用中のメモリブロック数がm個のとき,図4中のd,eに入れる適切な式を答えよ。
解答入力欄
- d:
- e:
解答例・解答の要点
- d:p+m
- e:n-m
解説
[d]はBuffering関数の第一引数の一部、[e]はBuffering関数の第二引数です。そして、Buffering関数のBuffering関数の第一引数と第二引数は、HDDRead関数の第一引数と第二引数としてそのまま使用されています。
表1「ハードディスクの制御に用いる関数」のHDDRead(s, t)の説明には、「ハードディスクから読み出した音声データを、s番目のメモリブロックからt個のメモリブロックにわたって格納して、実際に書き込んだメモリブロック数を返す」という説明があり、第一引数 s は読み込むメモリブロックの開始番号で、第二引数 t は格納するメモリブロックの個数であることがわかります。Buffering関数は、「全ての未使用のメモリブロックを使って,ハードディスクから音声データを読み出す」ために、データ読出しタスクから呼び出されるサブルーチンですから、引数sには未使用領域の先頭ブロックの番号、引数tには未使用のメモリブロックの個数を指定することになります。
図2「バッファメモリの制御」の図解を見ると、音声データの書込みを開始するメモリブロックの番号は p+m、未使用のメモリブロックの個数は n-m 個で表せることがわかります。開始位置の算出で「mod n」としているのは、メモリブロックはn-1番目に達したら次は番号0というように、0~n-1を周回するというリングバッファ(循環バッファ)方式であり、p+m がn-1以下とは限らないからです。例えば、n=100のときに p+m が110だったらp~99および0~10までが使用中ということなので、0に戻って番号11を開始番号にしなければなりません。このための調整です。
∴d=p+m
e=n-m
表1「ハードディスクの制御に用いる関数」のHDDRead(s, t)の説明には、「ハードディスクから読み出した音声データを、s番目のメモリブロックからt個のメモリブロックにわたって格納して、実際に書き込んだメモリブロック数を返す」という説明があり、第一引数 s は読み込むメモリブロックの開始番号で、第二引数 t は格納するメモリブロックの個数であることがわかります。Buffering関数は、「全ての未使用のメモリブロックを使って,ハードディスクから音声データを読み出す」ために、データ読出しタスクから呼び出されるサブルーチンですから、引数sには未使用領域の先頭ブロックの番号、引数tには未使用のメモリブロックの個数を指定することになります。
図2「バッファメモリの制御」の図解を見ると、音声データの書込みを開始するメモリブロックの番号は p+m、未使用のメモリブロックの個数は n-m 個で表せることがわかります。開始位置の算出で「mod n」としているのは、メモリブロックはn-1番目に達したら次は番号0というように、0~n-1を周回するというリングバッファ(循環バッファ)方式であり、p+m がn-1以下とは限らないからです。例えば、n=100のときに p+m が110だったらp~99および0~10までが使用中ということなので、0に戻って番号11を開始番号にしなければなりません。このための調整です。
∴d=p+m
e=n-m
設問3
図3中のcの処理がない場合,ボタンの操作のタイミングによっては,ハードディスクの回転が長時間停止しなくなってしまうことがある。cに入れる適切な字句を,20字以内で答えよ。
解答入力欄
- c:
解答例・解答の要点
- c:データ読出しタスクの終了を待つ (15文字)
解説
表3中のデータ読出しタスクの説明には「再生処理タスクが停止すると、このタスクも同時に強制的に終了させられる」とあります。データ読出しタスクでは、ハードディスクの回転開始、音声データ読出し、ハードディスクの回転停止までの一連の動作を行いますが、音声データ読出し中にタスクが強制終了してしまうと、ハードディスクに回転停止を指示するStandBy()が呼び出されず、ハードディスクが回転したままになってしまうという問題があります。
これを防ぐには、停止ボタンを押したときにデータ読出しタスクが実行中であれば、データ読出しタスクの終了を待って、再生処理タスクを終了する必要があります。図3の流れ図には「メッセージを待つ」という処理がありますから、これに倣って[c]には「データ読出しタスクの終了を待つ」という処理を入れるべきと判断できます。
∴データ読出しタスクの終了を待つ
これを防ぐには、停止ボタンを押したときにデータ読出しタスクが実行中であれば、データ読出しタスクの終了を待って、再生処理タスクを終了する必要があります。図3の流れ図には「メッセージを待つ」という処理がありますから、これに倣って[c]には「データ読出しタスクの終了を待つ」という処理を入れるべきと判断できます。
∴データ読出しタスクの終了を待つ