Instiq
第5章 · 組込みソフトウェア開発·v1.0.0·更新 2026/7/10·読了目安 約15分

変更要約: 初版

5.1クロス開発環境

この節の要点

PCなどのホスト上でターゲット(組込みボード)向けの実行コードを生成するクロスコンパイラリンカロケータの役割、ターゲット実機を直接デバッグするICEJTAGSWD・エミュレータの使い分け、そして実機デバッグの現場での判断力を学びます。

組込み開発では、ターゲットとなるマイコンボード上で直接コンパイラを動かすことは現実的ではありません。開発者はPC等のホスト上で開発環境を動かし、ターゲット向けの実行コードを生成し、それをターゲットのメモリ配置に合わせて配置し、最後にターゲット実機上で「ソースコード通りに動いているか」を直接観測する必要があります。この節では、その一連の流れを支えるツール群の役割分担と、実機デバッグの現場でどのツールを選ぶかという判断力を養います。

5.1.1クロスコンパイラ・リンカ・ロケータ

  • クロスコンパイラ=開発を行うホスト(PC等・x86系が多い)上で動作しながら、ターゲット(組込みボード・ARM Cortex-M等)向けの機械語を生成するコンパイラ。ホストとターゲットのCPUアーキテクチャが異なるために必要になる。
  • リンカ=コンパイル済みの複数のオブジェクトファイルとライブラリを結合し、1つの実行可能ファイルにまとめるツール。ロケータ=リンクされたコードやデータを、ターゲットの実際のメモリマップ(Flash開始アドレス・RAM開始アドレス等)上の具体的な番地に配置する処理。組込みではロケータが生成するマップファイルを確認し、コードサイズやデータ配置がターゲットのメモリ容量に収まっているかを検証するのが定石。

5.1.2実機デバッグツール(ICE/JTAG/SWD/エミュレータ)

  • ICE(In-Circuit Emulator)=ターゲットCPUを模擬する専用ハードウェアに置き換え、内部レジスタやバスの状態をリアルタイムに観測・制御できる高機能な実機デバッグ装置。高価だが、実CPUでは見えない内部状態まで追跡できる。
  • JTAG(Joint Test Action Group)=境界走査(バウンダリスキャン)を起源とする標準規格で、専用ピンを介してターゲットCPUに直接アクセスし、ブレークポイント設定・レジスタ/メモリ読み書き・フラッシュ書き込みを行う。現在最も普及したデバッグインタフェース。SWD(Serial Wire Debug)=ARM系マイコンで使われるJTAGよりピン数が少ない(2本)代替インタフェースで、基板の実装面積やコネクタ数を節約したい小型組込み機器に向く。
  • エミュレータ(広義)=ターゲット実機を使わずソフトウェア的にCPUや周辺回路の動作を模擬する環境。実機の入手前や、複数の設計案を素早く比較検討する初期段階の開発に有効だが、実際のクロック精度・電気的挙動・実機特有のタイミング問題までは再現しきれない限界がある。最終的な性能・タイミング検証は実機(ICE/JTAG/SWD経由)で行う必要がある。
試験ポイント

「クロスコンパイラ=ホストで動きターゲット向けコードを生成」「JTAG=標準的な実機デバッグI/F」「SWD=ARM向けの少ピン代替」「エミュレータ=実機なしで模擬できるが電気的挙動やタイミングは再現しきれない」が最頻出です。ICEは高価で高機能、という位置づけも押さえましょう。

あるファームウェア開発者が、ARM Cortex-M搭載の小型センサ端末で、エミュレータ上のシミュレーションでは正常に動作するのに、実機に書き込むと特定のタイミングでセンサ値の読み取りが失敗するという不具合に直面したとします。まずこの症状から、エミュレータでは再現できない「実機特有の電気的挙動やタイミング」が原因である可能性が高いと判断し、実機上での直接観測に切り替えることにしました。この端末は基板が非常に小型でJTAGの太いコネクタを実装する余地がなかったため、ピン数の少ないSWDを使ってデバッガを接続します。SWD経由でブレークポイントを設定し、センサ読み取り処理の直前・直後でCPUレジスタとメモリの値を観測したところ、センサとの通信直後にCPUが別の割込み処理へ切り替わり、通信のタイミング制約(一定時間内に次のコマンドを送る必要がある)を超過していたことが判明しました。もし高価なICEが利用可能であれば、CPU内部のバス状態までリアルタイムに追跡してより詳細な原因究明ができたはずですが、今回はSWD経由のレジスタ観測だけで原因を特定できたため、追加のICE調達は不要と判断しました。この事例のように、エミュレータでの開発初期検証と、実機でのICE/JTAG/SWDによる最終検証は役割が異なり、症状がタイミングや電気的挙動に起因する場合は必ず実機での観測に立ち返ることが、組込み開発者に求められる判断です。

ツール特徴向く場面
クロスコンパイラ/リンカ/ロケータホストでビルドしターゲットのメモリ配置に合わせて配置全ての組込み開発の基盤工程
JTAG標準的な多ピンI/F・普及度が高い一般的な実機デバッグ・フラッシュ書き込み
SWDARM向け・2本の少ピン基板が小型で実装面積が限られる機器
ICE専用ハードで内部状態までリアルタイム観測・高価タイミング/バス競合等の深い原因究明
エミュレータ(広義)実機不要だが電気的挙動/タイミングは再現不可実機入手前の初期検証・設計案比較
注意

ひっかけ: 「エミュレータで動作確認が取れれば実機でのタイミング検証は不要」は誤りです——エミュレータは電気的挙動や実機特有のタイミングを完全には再現できないため、最終的なタイミング/性能検証は必ず実機(JTAG/SWD/ICE)で行う必要があります。また「SWDはJTAGより高機能だから常にSWDを選ぶべき」も誤り=SWDはピン数削減が主な利点であり、機能面ではJTAGの方が広く枯れた標準として選ばれることも多く、基板制約・対応チップに応じて選定します。

クロスコンパイラ/JTAGの図。
別マシンで作り実機で動かす

5.1.3この節のまとめ

  • クロスコンパイラはホストで動きターゲット向けコードを生成、リンカ/ロケータはターゲットの実メモリ番地に配置する
  • JTAGは標準的な多ピンI/F、SWDは少ピンでARM向け、ICEは高価だが内部状態まで観測できる
  • エミュレータは初期検証に有効だが電気的挙動/タイミングは再現不可=最終検証は必ず実機で行う

進捗の記録にはログインが必要です。

理解度チェック

(軽い確認用)

Q1. ARM Cortex-M搭載のセンサ端末で、エミュレータ上のシミュレーションでは正常だが実機書き込み後に特定タイミングでセンサ読み取りが失敗する。この症状の原因調査として最も妥当な初動はどれか。

Q2. 基板が非常に小型でコネクタの実装面積が限られている組込み機器に、ARM系マイコンのデバッグ用インタフェースを追加したい。最も適切な選択はどれか。

Q3. ある組込み開発チームが、量産前の設計案を複数比較検討する初期段階で、実機の入手前にCPU・周辺回路の動作を素早く確認したいと考えている。この段階で最も適した手段はどれか。ただし最終的な性能・タイミング検証は別途実機で行う前提とする。

理解度を確認第5章「組込みソフトウェア開発」の問題を解く

学習の記録を残しませんか

参考書はすべて無料で読めます。無料登録すると、問題集での演習・既読と進捗の記録・間違えた問題の復習・ハイライトが使えます。