応用情報 組込みシステム 4 — Questions and Answers
Question 1: 組込みシステムのリンカスクリプトの役割はどれか。
- コンパイル済みオブジェクトをROM/RAMのアドレスに配置するルールを定義する (Correct answer)
- 実行時にライブラリを動的にリンクする
- コードの最適化ルールを定義する
- デバッグシンボルの出力形式を制御する
Correct answer: コンパイル済みオブジェクトをROM/RAMのアドレスに配置するルールを定義する
リンカスクリプト(.ld/.lds)はコードをFlash・データをRAMの特定アドレスに配置するセクション配置ルールを定義する。スタックサイズ・ヒープサイズ・ペリフェラルレジスタアドレスも定義できる。
Question 2: 組込みシステムのクロスコンパイルの説明として正しいものはどれか。
- 開発ホスト(PC)上で、異なるアーキテクチャ(ARM等)向けの実行ファイルを生成する (Correct answer)
- ターゲット上でソースコードをコンパイルする
- 2つの異なる言語間でコードを変換する
- コンパイラが最適化のためにコードを自動修正する
Correct answer: 開発ホスト(PC)上で、異なるアーキテクチャ(ARM等)向けの実行ファイルを生成する
クロスコンパイルはx86のPCで、ARMやRISC-Vなど異なるCPUアーキテクチャ向けの機械語を生成すること。組込み開発で一般的。arm-none-eabi-gccなどのクロスコンパイラを使用する。
Question 3: 組込みシステムのセクション配置で.bssセクションの説明として正しいものはどれか。
- 初期化されていないグローバル・スタティック変数の領域でプログラム起動時にゼロクリアされる (Correct answer)
- プログラムコード(命令)を格納するセクション
- 初期化済みの読み書き可能データを格納するセクション
- 文字列リテラル・定数を格納するROMセクション
Correct answer: 初期化されていないグローバル・スタティック変数の領域でプログラム起動時にゼロクリアされる
C言語の初期化なし(またはゼロ初期化)グローバル・static変数は.bssセクションに配置。ROM上にはサイズ情報のみ保存し、スタートアップコードが起動時にRAMの.bss領域をゼロクリアする。
Question 4: 組込みシステムのJTAGデバッグの説明として正しいものはどれか。
- 標準インタフェースを使いターゲットCPUのレジスタ・メモリを読み書きしブレークポイントを設定する (Correct answer)
- UARTを通じたログ出力によるデバッグ
- シミュレータ上でのオフラインデバッグ
- プログラムの静的解析ツール
Correct answer: 標準インタフェースを使いターゲットCPUのレジスタ・メモリを読み書きしブレークポイントを設定する
JTAG(IEEE 1149.1)はTCK・TMS・TDI・TDO・TRSTの5線からなるデバッグインタフェース。オンチップデバッグで実際のハードウェア上でブレークポイント・ステップ実行・メモリ観察が可能。
Question 5: 組込みシステムのメモリ保護ユニット(MPU)の役割はどれか。
- メモリ領域に読み取り・書き込み・実行の権限を設定し不正アクセスを防ぐ (Correct answer)
- メモリのECCエラー訂正を行う
- メモリのウェアレベリングを管理する
- キャッシュの一貫性を保証する
Correct answer: メモリ領域に読み取り・書き込み・実行の権限を設定し不正アクセスを防ぐ
MPUはメモリ領域ごとにアクセス権(R/W/X)と特権レベルを設定し、スタック破壊・未割り当てアドレスへのアクセスなどの不正アクセスでFaultを発生させる。MMUより単純でRTOSと組み合わせて使われる。
Question 6: 組込みシステムで使われるFPGA(Field Programmable Gate Array)の特徴はどれか。
- 製造後も回路構成を書き換え可能なプログラマブルロジックデバイス (Correct answer)
- ARMコアを搭載した汎用マイコン
- 一度だけ書き込み可能なワンタイムプログラム素子
- DSP(デジタル信号処理)専用チップ
Correct answer: 製造後も回路構成を書き換え可能なプログラマブルロジックデバイス
FPGAはLUT(Lookup Table)やフリップフロップなどの論理ブロックを配線で接続した回路をHDL(VHDL・Verilog)で記述してプログラムする。カスタムASICより安価で柔軟、低遅延並列処理が強み。
組込みシステムのリンカスクリプトの役割はどれか。