組込み・ファームウェア

小さなマイコンのファームウェアで、mallocなどの動的なメモリの確保を避けることが多い理由として正しいものはどれか。

  1. AマイコンではC言語の関数を一切使えないから
  2. BRAMが小さく、断片化で確保に失敗したり、確保にかかる時間が予測しにくかったりするから
  3. C動的に確保したメモリは、電源を切っても消えないから
答えと解説を見る

正解:B. RAMが小さく、断片化で確保に失敗したり、確保にかかる時間が予測しにくかったりするから

数KB〜数百KBのRAMしかないマイコンで確保と解放を繰り返すと、空きが細かく分かれて、合計は足りていても大きな確保に失敗することがあります。何か月も動き続ける機器では、いつか失敗する危険があります。また確保にかかる時間が一定でないので、リアルタイムの処理には向きません。そのため、必要なメモリを最初に静的に確保しておく設計がよく使われます。

  • A. C言語の関数は普通に使えます。
  • B. 正しい。長く動き続ける機器では特に問題になります。
  • C. 電源を切れば消えます。
この分野を解く 分野ページへ

組込み・ファームウェアのほかの問題

  1. MMUを持たない小さなマイコンで、スタックの使いすぎについて注意すべきこととして正しいものはどれか。
  2. 基準電圧3.3 Vの12ビットのADコンバータで、読み取った値が2048だった。入力の電圧に最も近いものはどれか。
  3. マイコンでADコンバータの変換結果を一定の間隔で大量に取り込むとき、DMAを使う利点として正しいものはどれか。
  4. C言語のビットフィールドを使った構造体で周辺回路のレジスタを表すとき、注意が必要な点として正しいものはどれか。
  5. 多くのマイコンで、変更しない大きな表(フォントのデータなど)をconstを付けて宣言する利点として正しいものはどれか。