Skip to main content

IAR Embedded Workbench for Arm 9.70.x

ランタイム環境の概要

このセクションの内容:

ランタイム環境は、アプリケーションを実行するための環境です。

ランタイム環境の機能

DLIBランタイム環境は標準のC/C++をサポートし、以下が含まれます。

  • C/C++標準ライブラリ、両方のインタフェース(システムヘッダファイルに同梱)、およびその実装。

  • 起動/終了コード

  • 入出力(I/O)を管理するための低レベルI/Oインタフェース

  • 特殊なコンパイラのサポート。たとえば、切替えの処理や整数演算のための関数など。

  • ハードウェア機能のサポート

    • 組み込み関数(割り込みマスク処理用関数など)による低レベルプロセッサ処理へ直接アクセス

    • インクルードファイルでの周辺ユニットレジスタと割り込みの定義

    • ベクタ浮動小数点(VFP)コプロセッサ

  • 特別なABI関数。AEABI準拠の詳細については、AEABIへの準拠を参照してください。

ランタイム環境の関数はランタイムライブラリで提供されます。.

ランタイムライブラリは、ビルド済みと(製品パッケージに応じて)ソースファイルとして提供されます。ビルド済ライブラリは、さまざまなニーズに対応するよう異なる構成のものを用意しています(ランタイムライブラリ構成を参照)。ライブラリは、製品のサブディレクトリ(arm\libおよびarm\src\lib)にあります。

ライブラリの詳細は、「C/C++標準ライブラリ関数」を参照してください。

入出力(I/O)の概要

すべてのアプリケーションは、その環境と交信する必要があります。たとえば、アプリケーションがLCDに情報を表示し、センサーから値を読み込んだり、オペレーティングシステムから最新の値を取得するといったことが考えられます。アプリケーションは通常、C/C++標準ライブラリまたは何らかのサードパーティ製ライブラリを介してI/Oを実行します。

I/Oを処理するC/C++標準ライブラリには数多くの関数があり標準文字ストリーム、ファイルシステムアクセス、日時、その他のシステムアクション、終了およびアサートなどがあります。この関数のセットを標準I/Oインタフェースといいます。

デスクトップコンピュータやサーバでは、オペレーティングシステムがランタイム環境の標準I/Oインタフェースを通じてアプリケーションにI/O機能を提供することになっています。ただし、組み込みシステムではランタイムライブラリはそういった機能が存在したり、オペレーティングシステムがあることすら想定でき ません。このため、標準I/Oインタフェースの低レベルの部分はデフォルトでは完全には実装されません。

StandardIOinterface_1.png

標準I/Oインタフェースを機能させるには、以下のようにします。

これらの2つのアプローチを組み合わせることも可能です。たとえば、デバッグの出力とアサートをC-SPYデバッガによりエミュレーションする一方、自身のファイルシステムを実装するなどです。デバッグの出力とアサートはデバッグ中には便利ですが、アプリケーションをスタンドアロン(C-SPYに接続されていない状態)で実行する際には不要です。

C-SPYによりエミュレーションされたI/Oの概要

C-SPYによりエミュレーションされたI/Oは、ランタイム環境をC-SPYデバッガと連携させて、ホストコンピュータ上でI/O処理をエミュレーションするメカニズムです。

CSPYemulatedIO_1.png

たとえば、C-SPYによりエミュレーションされたI/Oを有効にした場合、次のようになります。

  • 標準文字ストリームがC-SPY [ターミナルI/O]ウィンドウに送られる

  • ファイルシステムの操作がホストコンピュータ上で実行される

  • 時間および日にちの関数がホストコンピュータの時間および日にちを返す

  • アプリケーションが終了した、またはアサートが失敗したとき、C-SPYデバッガは通知します。

この動作はアプリケーション開発の初期に非常に役立ちます。たとえば、フラッシュファイルシステムのI/Oドライバを実装する前にファイルI/Oを使用するアプリケーションや、I/Oを利用可能にする実際のハードウェアデバイスを持たないstdinおよびstdoutを使用するアプリケーション内の構造体をデバッグしなければならないときなどです。

ランタイム環境の設定およびセミホスティングのメカニズムを参照してください。

再ターゲットの概要

再ターゲットは、アプリケーションがターゲットシステム上でI/O処理を実行できるようにランタイム環境を適応するプロセスです。

標準のI/Oインタフェースは大きくて複雑です。再ターゲットを簡単にするため、DLIBランタイム環境は単純な関数の小さいセットを通してすべてのI/O処理を実行するよう設計されています。これらの関数のセットをDLIB低レベルI/Oインタフェースといいます。デフォルトでは、低レベルインタフェースの関数には使用可能な実装はありません。実装されていないものもあり、エラーコードを返す以外は何も実行しないスタブ実装のものもあります。

標準のI/Oインタフェースを再ターゲットするには、DLIB低レベルI/Oインタフェース内で関数に実装を提供するだけです。

Retargeting_1.png

たとえば、アプリケーションが標準I/Oインタフェース内で関数printffputcを呼び出す場合、これらの関数の実装はどちらも個々の文字を出力するために低レベル関数__writeを呼び出します。これらを機能させるには、__write関数の実装を提供するだけでよく、自分で実装するか、サードパーティ製の実装を使用してこれを行います。

自身の実装によるライブラリモジュールのオーバライドの詳細については、ライブラリモジュールのオーバライドを参照してください。インタフェースの一部である関数の詳細は、DLIB低レベルI/Oインタフェースも参照してください。