0Pricing
C++ Academy · レッスン

ARMターゲット向けクロスコンパイル

ARMマイクロコントローラーを対象とするクロスコンパイルツールチェーンを設定します。

「ARMターゲット向けクロスコンパイル」はCoddyKit上の無料C++ Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC++ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C++ Academyコースには全4レッスンが含まれています。

クロスコンパイルとは

あるプラットフォーム(ホスト)で、別のプラットフォーム(ターゲット)で実行するためのコンパイルを行います。組み込み開発では不可欠です。ノートパソコンでコードを書き、マイクロコントローラで実行します。

クロスコンパイラツールチェーン

ツールチェーンには、特定のターゲット向けのクロスコンパイラ、リンカー、デバッガ、標準ライブラリがまとめられています。

# GCC ARM Embedded for Cortex-M
arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -O2 main.c
arm-none-eabi-objcopy -O ihex a.out a.hex

ツールチェーンのインストール

一般的な選択肢は次のとおりです。

  • GCC ARM Embedded — 公式ツールチェーンで、無料です
  • Clang/LLVM — 多くのターゲットを標準でサポートします
  • ベンダーのツールチェーン — IDEに同梱されています(Keil、IAR)

ターゲットトリプル

トリプルはターゲットを識別します。CPU-Vendor-OS-ABIという形式です。例を示します。

  • arm-none-eabi — ベアメタルARM
  • aarch64-linux-gnu — 64ビットARM Linux
  • x86_64-pc-windows-msvc — MSVC ABIを使用するWindows x64

リンカースクリプト

組み込みターゲットでは、メモリレイアウトを記述するリンカースクリプトが必要です。FlashとRAMの位置や、スタックの開始位置などを指定します。ツールチェーンにはデフォルトのスクリプトが付属しており、上書きできます。

/* Simplified linker script */
MEMORY {
    FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 256K
    RAM   (rw) : ORIGIN = 0x20000000, LENGTH = 64K
}

スタートアップとベクタテーブル

スタートアップファイルは、スタックポインタを設定し、初期化済みデータをFlashからRAMへコピーし、BSSをゼロ初期化してからmainへジャンプします。通常はベンダーから提供されます。

ARM向けコンパイラフラグ

一般的なフラグは次のとおりです。

  • -mcpu=cortex-m4 — 特定のCPUを指定します
  • -mthumb — Thumb命令セットを指定します
  • -mfloat-abi=hard -mfpu=fpv4-sp-d16 — ハードウェアFPUを指定します
  • -Os — サイズを優先して最適化します

NewlibとNewlib-Nano

組み込み向けGCCの標準Cライブラリです。Newlib-Nanoは、コードサイズを小さくした簡略版です。

libcとのリンク

多くの組み込みプロジェクトでは、最小限のlibcとリンクするか、必要な機能だけを実装します(printfの代替やmallocのスタブなど)。

クロスコンパイル向けCMake

CMakeを呼び出すときに、ツールチェーンファイルを指定します。

# arm-none-eabi.cmake
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)

# Usage
cmake -B build -DCMAKE_TOOLCHAIN_FILE=arm-none-eabi.cmake

GDBによるデバッグ

ターゲット専用のGDB(arm-none-eabi-gdb)を、OpenOCD、ST-Link、J-Link、またはpyOCD経由でハードウェアプローブに接続して使用します。

バイナリの書き込み

ELFをhexファイルまたはバイナリファイルに変換し、ベンダーのツールまたはOpenOCDを使ってFlashに書き込みます。

arm-none-eabi-objcopy -O binary firmware.elf firmware.bin
st-flash write firmware.bin 0x08000000

まずホストでテストする

完全なデバッグ環境があるホスト上でロジックを開発します。ハードウェアに触れる層だけをターゲットへ移します。単体テストでは周辺機器をモック化してください。

クイックチェック

ターゲットトリプルarm-none-eabiは何を示していますか。

まとめ

クロスコンパイルを使うと、開発マシンからARM(またはその他のターゲット)向けにビルドできます。ターゲット向けツールチェーン(arm-none-eabi-gcc)を使用し、リンカースクリプトを設定し、適切なCPUフラグを選択して、OpenOCDとGDBでデバッグします。CMakeのツールチェーンファイルによって設定を自動化できます。

よくある質問

「ARMターゲット向けクロスコンパイル」レッスンは無料ですか?

はい。「ARMターゲット向けクロスコンパイル」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C++ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C++ Academyコースには全4レッスンが含まれています。

「ARMターゲット向けクロスコンパイル」で何を学びますか?

ARMマイクロコントローラーを対象とするクロスコンパイルツールチェーンを設定します。 ブラウザで直接実行するハンズオンコードでC++ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C++ Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC++ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「ARMターゲット向けクロスコンパイル」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC++ Academyレッスンでコードを書いて実行できますか?

はい。すべてのC++ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 組み込み環境の制約:RTTIなし、例外なし
  2. メモリマップドI/Oとvolatile
  3. リアルタイムにおける考慮事項とレイテンシー
  4. ARMターゲット向けクロスコンパイル
← C++ Academyに戻る