2012年 春期 応用情報技術者試験 問7
オーディオプレーヤの組込みソフトウェアの設計
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に示す。
関数名 | 説明 |
---|---|
SpinUp() | ハードディスクのモータの回転開始を指示する。 |
StandBy() | ハードディスクのモータの回転停止を指示する。 |
HDDRead(s, t) | ハードディスクから読み出した音声データを,s 番目のメモリブロックから t 個のメモリブロックにわたって格納して,実際に書き込んだメモリブロック数を返す。 |
t 個のメモリブロックに書き込みを終える前に音声ファイルの終端に達した場合は,ファイルの終端までで処理を終了する。 | |
音声データの終端には終端記号を追加し,メモリブロックに書き込む。 | |
事前に SpinUp を実行しておかないとエラーになる。 |
[DSP ドライバの制御]
DSP ドライバは,DSP を駆動する他,状況に応じて再生処理タスクにメッセージを送信する。DSP ドライバの制御に用いる関数を表2に示す。
関数名 | 説明 |
---|---|
dsp_start() | DSP ドライバに,DSP の動作開始を指示する。 |
DSP ドライバは,再生処理タスクに以下のメッセージを送信する。 | |
READY:DSP が次のメモリブロックを処理する準備ができたことを示す。 | |
STOP:音声データの終端に到達したことを示す。 | |
DSP ドライバは,dsp_start() を開始した直後に READY メッセージを送信し,その後 DSP の準備ができるたびに,次々と READY メッセージを送信する。 | |
DSP ドライバに,DSP の動作停止を指示する。 | |
dsp_end() |
[組込みソフトウェアのタスク構成]
開発する組込みソフトウェアのタスクの動作内容を表3に示す。各タスクには実行状態,待ち状態及び停止状態があり,実行権はラウンドロビン方式で与えられる。
タスク名 | 説明 |
---|---|
メインタスク | 電源投入時に開始されるメインプログラム。プレーヤの状態を管理する。 |
再生ボタンが押され,音声ファイルの再生を開始するときには,再生処理タスクを立ち上げる。停止ボタンが押され,音声ファイルの再生を停止するときには,bタスクにSTOPを送信し,タスクの終了を待つ。 | |
開始時には全てのメモリブロックを未使用にした後,全てのメモリブロックを使って音声データを読み出し,DSP ドライバに DSP の動作開始を指示する。 | |
READY メッセージが受信されていると,メモリブロック 1 個分の音声データを DSP ドライバに転送する。STOP メッセージが受信されていると,DSP ドライバに DSP の動作停止を指示して,再生処理を終了する。 | |
再生処理タスク | 音声ファイル中の音声データの大きさが,バッファメモリの全体の容量を超える場合は,音声の再生中に音声データの追加読出しを行って,音声ファイルの全体を連続して再生する。 |
使用中のメモリブロック数が,事前に定義した一定の数よりも少なくなったときに,データ読出しタスクを開始して音声データの追加読出しを行う。 | |
データ読出しタスク | サブルーチン Buffering(s, t)を呼び出して,全ての未使用のメモリブロックを使って,ハードディスクから音声データを読み出す。 |
再生処理タスクが停止すると,このタスクも同時に強制的に終了させられる。なお,このタスクは 2 個以上同時に存在してはならない。 |
再生処理タスクの流れ図を図3に,データ読出しタスクの流れ図を図4に,図3及び図4で使用しているサブルーチン Buffering(s, t)の流れ図を図5に示す。
なお,図3中の下線①の判定条件は,音声データの追加読出しを開始する条件である。また,図4中の mod は剰余の演算子で,a mod b は a を b で割った余りである。
なお,図3中の下線①の判定条件は,音声データの追加読出しを開始する条件である。また,図4中の mod は剰余の演算子で,a mod b は a を b で割った余りである。
図3中のcの処理がない場合,ボタンの操作のタイミングによっては,ハードディスクの回転が長時間停止しなくなってしまうことがある。
cに入れる適切な字句を,20字以内で答えよ。