Skip to main content

IAR Embedded Workbench for Arm 9.70.x

IARビルドツールを使用した組み込みソフトウェアの開発

このセクションの内容:

通常、専用マイクロコントローラに記述される組み込みソフトウェアは、何らかの外部イベントの発生を待機するエンドレスループとして設計されます。このソフトウェアは、ROMに置かれ、リセット時に実行されます。この種のソフトウェアを作成する際には、いくつかのハードウェア要因およびソフトウェア要因を考慮する必要があります。それらを支援するためのコンパイラオプション、拡張したキーワード、pragma ディレクティブなどが含まれています。

メモリのマッピング

組み込みシステムには、通常、オンチップRAM、外部DRAM、外部SRAM、外部ROM、外部EEPROM、フラッシュメモリなど、さまざまなタイプのメモリが含まれます。

組み込みソフトウェア開発者は、これらのさまざまなメモリタイプの機能を理解する必要があります。たとえば、オンチップRAMは、通常、他のメモリタイプより高速なので、実行時間重視のアプリケーションでは、頻繁にアクセスされる変数をこのメモリに配置することでメリットを得ることができます。逆に、アクセスは頻繁に行われないが、電源を切った後でもその値を保持する必要がある設定データは、EEPROMまたはフラッシュメモリに保存する必要があります。

メモリを効率的に使用するため、コンパイラでは、関数とデータオブジェクトのメモリへの配置を制御するためのさまざまな仕組みを提供しています。詳細については、データと関数のメモリ配置制御を参照してください。

リンカは、リンカ設定ファイルで指定したディレクティブに従って、メモリにコードおよびデータのセクションを配置します(コードおよびデータの配置(リンカ設定ファイル)を参照)。

周辺ユニットとの通信

外部デバイスがマイクロコントローラーと接続されている場合、シグナルインターフェイスを初期化とコントロールする必要があり、例えばチップ選択ピンを使用して外部割り込み信号を検出と処理します。通常、初期化および制御はランタイムに実行する必要があります。通常、これはスペシャルファンクションレジスタ(SFR)を使用して行います。これらのレジスタは、通常、チップ設定を制御するビットを含む、専用アドレスで使用できます。

標準の周辺ユニットは、デバイス専用のI/Oヘッダファイル(拡張子はh)で定義されています。デバイスサポートを参照してください。この例については、特殊機能レジスタへのアクセスを参照してください。

イベント処理

組込みシステムでは、ボタン押下の検出など、外部イベントを即座に処理するために割り込みを使用します。通常、コード中で割り込みが発生すると、コアはすぐにコードの実行を停止し、その代わりに割り込みルーチンの実行を開始します。

コンパイラには、ハードウェアおよびソフトウェア割り込みを管理するためのさまざまな基本関数が用意されています。つまり、Cで割り込みルーチンを記述できるということです(Cortex-Mデバイスの割り込み関数ARM7/9/11、Cortex-A、Cortex-R の割り込み関数を参照)。64ビットモードの例外関数も参照してください。

システム起動

すべての組み込みシステムでは、アプリケーションのmain関数が呼び出される前に、システム起動コードが実行され、ハードウェアとソフトウェアの両方のシステムが初期化されます。CPUは、固定メモリアドレスから実行を開始することで、これを行います。

組み込みソフトウェア開発者は、この起動コードを専用メモリアドレスに配置するか、ベクタテーブルからポインタを使用してアクセスできるようにしなければなりません。つまり、起動コードおよび初期ベクタテーブルは、ROM、EPROM、フラッシュなど、不揮発性メモリに配置する必要があります。

C/C++アプリケーションでは、さらに、すべてのグローバル変数を初期化する必要があります。この初期化は、システム起動コードとともにリンカによって行われます。詳細については、アプリケーションの実行 — 概要を参照してください。

リアルタイムオペレーティングシステム

通常、組み込みアプリケーションは、システムで実行する唯一のソフトウェアです。ただし、RTOSを使用した場合、いくつかのメリットがあります。

たとえば、優先順位の高いタスクのタイミングが、優先順位の低いタスクで実行されるプログラムの他の部分による影響を受けることはありません。これにより、一般的に、プログラムの順序をより簡単に制御できるようになります。また、CPUを効率的に使用し、待機時にCPUを低電力モードにすることで、消費電力が削減されます。

RTOSを使用すると、プログラムの判読および保守が簡単になり、多くの場合、サイズも小さくなります。アプリケーションコードは、それぞれが独立したタスクに明確に分割できます。これにより、1人の開発者または開発者のグループが担当できるように開発作業を個々のタスクに簡単に分割できるので、チームでの共同作業がより円滑になります。

さらに、RTOSを使用することで、ハードウェア依存関係が削減され、アプリケーションに明確なインタフェースが作成されるので、異なるターゲットハードウェアにプログラムを移植しやすくなります。

マルチスレッド環境の管理も参照してください。

他のビルドツールとの相互運用

IARコンパイラおよびリンカは、AEABI ( Embedded Application Binary Interface for Arm)のサポートを提供します。このインタフェース仕様の詳細については、Webサイトwww.arm.comを参照してください。

このインタフェースでは、これをサポートするベンダ間での相互運用性が提供されるというメリットがあります。アプリケーションは、AEABI標準に準拠しているのであれば、別のベンダで生成されたオブジェクトファイルのライブラリで構築し、任意のベンダのリンカでリンクできます。

AEABIは、C/C++オブジェクトコード、Cライブラリの完全な互換性を規定します。AEABIには、C++ライブラリの仕様は含まれません。

IARビルドツールでのAEABIサポートの詳細については、AEABIへの準拠を参照してください。

Arm用のIARビルドツールのバージョン8.xx以降は、以前のバージョンの製品と完全に互換ではありません。詳しくは、『IAR Embedded Workbench® IDEユーザガイド』を参照してください。

詳細については、リンカの最適化を参照してください。