応用情報 組込みシステム 3 — Questions and Answers
Question 1: 組込みシステムのスタックオーバーフローの原因として最も典型的なものはどれか。
- 深いネスト・無限再帰・ローカル変数の過剰な使用によるスタック領域の枯渇 (Correct answer)
- ヒープメモリの断片化
- グローバル変数の過剰な使用
- フラッシュメモリへの過剰な書き込み
Correct answer: 深いネスト・無限再帰・ローカル変数の過剰な使用によるスタック領域の枯渇
スタックオーバーフローは関数呼び出しのネストが深くなりすぎる・再帰が止まらない・ローカルの大配列宣言などでスタック領域が枯渇する問題。RTOSでは各タスクのスタックサイズを適切に設定する。
Question 2: MISRA-Cの説明として正しいものはどれか。
- 自動車・組込みシステム向けの安全なC言語コーディング規則 (Correct answer)
- C++の組込み向けサブセット
- 組込みLinuxの標準ディストリビューション
- ARMプロセッサ向けの命令セットアーキテクチャ
Correct answer: 自動車・組込みシステム向けの安全なC言語コーディング規則
MISRA-C(Motor Industry Software Reliability Association)は自動車・医療・航空など安全性が求められる組込みシステム向けのC言語コーディング規則集。未定義動作や実装依存動作を禁止する。
Question 3: 組込みシステムのブートローダーの役割はどれか。
- 電源投入後にハードウェアを初期化してメインアプリケーションをRAMに展開し起動する (Correct answer)
- 実行中のアプリの脆弱性をスキャンする
- フラッシュメモリのウェアレベリングを管理する
- 外部通信の暗号化を担当する
Correct answer: 電源投入後にハードウェアを初期化してメインアプリケーションをRAMに展開し起動する
ブートローダーはROMに書かれた小さなプログラムで、電源投入時にCPU・メモリ・クロックを初期化し、フラッシュからアプリケーションをRAMに転送して実行を開始する。OTAアップデートにも使われる。
Question 4: 組込みシステムで「ビットフィールド」を使う主な目的はどれか。
- 1バイト内の特定ビットを直感的に操作しメモリとI/Oレジスタを効率的に扱う (Correct answer)
- 浮動小数点数を扱う
- 文字列を効率的に格納する
- 動的メモリ割り当てを最適化する
Correct answer: 1バイト内の特定ビットを直感的に操作しメモリとI/Oレジスタを効率的に扱う
ビットフィールドはCの構造体でビット単位のメンバを宣言できる機能。ハードウェアレジスタのフラグビットをわかりやすく操作したり、メモリ制約の厳しい組込みでパックデータを扱うのに有効。
Question 5: タスク間通信にメッセージキューを使用する利点として正しいものはどれか。
- 送信タスクと受信タスクを時間的に切り離し非同期で安全にデータを受け渡せる (Correct answer)
- 割り込み処理が不要になる
- メモリ使用量が削減される
- クロック周波数が向上する
Correct answer: 送信タスクと受信タスクを時間的に切り離し非同期で安全にデータを受け渡せる
RTOSのメッセージキューはタスク間・ISR間でスレッドセーフにデータを受け渡す。送信側はキューに書くだけで受信側がいつ読むかを気にせず、受信側は待機中にCPUを解放できる。
Question 6: CAN(Controller Area Network)バスの特徴として正しいものはどれか。
- 差動信号の2線バスで多マスタ方式、車載ネットワークの標準プロトコル (Correct answer)
- 単線シリアルでマスタ1台のみ接続可能
- イーサネットをベースにした高速通信
- 光ファイバーを使用した高速バス
Correct answer: 差動信号の2線バスで多マスタ方式、車載ネットワークの標準プロトコル
CANは自動車のECU間通信に使われる2線差動(CAN-H/CAN-L)バス。多マスタ・CSMA/CA方式でメッセージID優先度で衝突解決。高ノイズ耐性を持ち、自動車・産業機器で広く使われる。
組込みシステムのスタックオーバーフローの原因として最も典型的なものはどれか。