問1 カーオーディオシステム
設問1
まずは(1)ですね。USBメモリを使用したときの動作に関してはP3~P4に記述があります。
ここの最後に「4段目のバッファまでPCMデータを蓄積し終えると、DAC送信を開始する」。
躓くところと言えば「音声出力」≒「DAC送信を開始」が分かるかどうかです。
DACとは、Digital Analog Converterで音声データ(Digital)を音声出力(Analog)に
変換(Converter)する機能ですので、DAC送信が開始される迄の動作・条件が分かれば
回答できます。
次に(2)ですが、USB通信のエラーリトライ処理と難しい事が書かれています。
ここでの「エラーリトライ処理」とは、
「USBメモリから正しくデータ受信できなかったので、もう一回送る」
という意味です。
移動中に動画をストリーミング再生する場合を考えると分かりやすいかと思います。
プレーヤで、現在の再生位置を示すバーとその後ろに薄いバーが有りますよね。
この薄いバ―が「バッファ」と言われるものです。
これがなくなると、動画が一旦停止したり、数コマ飛んだりします。
音声でも同様の事が発生します。
先ほどの(1)で4段バッファがあるのは理解できました。
■をデータ有り、□をデータ無しとすると
1 2 3 4 5 6 |
バッファ DAC ■■■■ ⇒ ■ (一) ■■■□ ⇒ ■ (二) ■■□□ ⇒ ■ (三) ■□□□ ⇒ ■ (四) □□□□ ⇒ ■ (五) |
リトライ発生し続けた場合は、このような動作となります。
(一)、(二)が正常な状態ですね。
(五)の状態になると、伸張と再生データ終了タイミングでどうなるか分かりませんので
絶対に安全(音途切れ発生しない)なのは(四)の状態ですね。
(1) 4段目のバッファまでデータが蓄積される時間
(2) (a) 再生音が途切れしまう
(b) 3段分
設問2
WDT(Watch Dog Timer)その名の通り番犬です。なんの番犬かと言いますと、システムに異常が
発生したことを検出する番犬です。
Timerと名前が付く通り、時間を数えています。ある一定期間内に時間(カウンタ)をクリアしないと
異常を示す割り込みをCPUに発生させます。一般的にはこれでリセットがかかることになります。
(1)ですが、優先度が高いタスクでWDTの時間をクリアするようにしてると、優先度が高いタスクで
異常が発生しても正常にWDTの時間をクリアするでしょう(100%ではないですが)。
逆に、優先度が低いタスクでWDTの時間をクリアするようにしていると、優先度が高いタスクで
発生した異常は確実に検出できることになります。
「待ち状態が解除されない異常」とはどういった異常でしょうか?
例えば、タスクA⇒タスクB⇒タスクC⇒処理終了(システム監視タスク動作)が繰り返されるとします。
しかし何らかのリソース権限を取得できないので、タスクAが開始できないとすると、
システム監視タスク動作が確実にWDTの時間をクリアしますので、このような異常は検出できません。
そこでタスクA、タスクB、タスクCが発生したら、フラグA、フラグB、フラグCがセットされるという
仕組みを作って、システム監視タスク内では
「フラグA、フラグB、フラグCのすべてがセットされていた時、WDTの時間をクリアする」
という動作に修正する事で、このような異常も検出できることになります。
ここでの問題文には、スマホ再生時とありますので、使用しているタスクは
「メイン、音声出力、PCMデータ受信」になります。
(2)ですが、表1には「ファイル検索とファイルの決定」が書かれていますね。これは操作キーの選択を
示していると思います。残すはP3の説明から「USBメモリなぽの再生可能な圧縮音楽ファイルを検索し、
検索順に再生を開始する」とありますので、ここから30字にまとめましょう。
穴埋め問題です。
PCMデータで「 b 」分の圧縮データを受け取ると
⇒ P3の説明に記載がありますね。1000サンプル分のPCMデータを生成し
バッファの「 c 」までPCMデータを蓄積すると
⇒ ここもP3の説明で分かります。「4段目」しかあり得ません。
再生経過時間を算出し「 d 」に通知する
曲の終了を「 d 」に通知する
⇒ 図3を見るとすぐに分かります。音声出力タスクに繋がっているのは「メインタスク」ですね。
「情報」をサブMCUに送信する。何が必要なんでしょうか?
サブMCUが制御しているのは図1から「表示パネル」です。表示パネルの仕様はP2に書かれています。
「再生中の圧縮音楽ファイル名、再生経過時間などの表示制御を行う」と。
(1)
(a) 優先度が高いタスクの異常発生を確実に検出できるようにするため
(b) メイン、音声出力、PCMデータ受信
(2)
(a) a:検索した圧縮音楽ファイルをメインタスクに通知する
(b) b:1000サンプル
c:4段目
d:メインタスク
(c) 圧縮音楽ファイル名
再生経過時間
設問3
(1)は穴埋めですが、知らない人には難しいですね。周波数がずれている場合です。
図を書くとイメージできると思いますが、(oが送信、受信タイミングです)
1 2 3 4 5 6 |
【同期がとれている場合】 送信 o o o o o 受信 o o o o o 【同期がとれていない場合】 送信 o o o o o 受信 o o o o |
こんな感じでだんだんとずれてきます。
gはパッと分かりませんでした。「1000サンプル分を4段持っているんだろ!」と
言いたいところでした。(ここは忘れましょう)
まずは5分間で必要なデータを計算しましょう。
192Khz * 4Byte(32bit) * 2ch(ステレオ) = 1536KByte/s
このデータが1秒再生に必要なデータなので5分間だと
1536KByte * 60s * 5min = 46080KByte
が必要となる。
周波数誤差が0.01%なので、この中の0.01%のデータに取りこぼしが発生すると考えると
46080KByte * 0.01% = 46080Byte (単位に注意)
となる。このデータがバッファ2段に格納できればいいので
46080Byte ÷ 2 =23040 Byte
という計算になります。
(2)も単純に計算しましょう。「サイクル時間は5.2usとする」とご丁寧に書いてあります。
これは「DACに32bitを送る間隔は5.2us」という意味です。なのでバッファ1段分(1000サンプル)
を送信する時間は
5.2us * 1000 = 5.2ms
となります。CPU占有率を50%以下という事はこれの半分以下の時間で伸張が完了すればいいので
5.2ms ÷ 2 = 2.6ms
となります。
(1) e: アンダーフロー (データの受信もれ)
f: オーバフロー (同一データを複数回受信)
g: 23040Byte
(2) 2.6ms