1.7.6 カスタマイズされた C ライブラリ起動コードおよび C ライブラリ関数へのアクセス

カスタマイズされた起動コードを使用してアプリケーションをビルドする場合は、初期化を必要とする関数を使用しないようにするか、初期化関数および低レベルサポート関数を指定する必要があります。

C ライブラリを使用せずにアプリケーションをビルドする場合、main() 関数が含まれているアプリケーションを作成すると、リンカが、実行環境に必要な初期化コードを自動的にインクルードします。ただし、この方法が不可能であったり、行わない方がよい場合もあります。例えば、リアルタイムオペレーティングシステム(RTOS)が動作するシステムには、RTOS 起動コードにより実行環境が設定される可能性があります。
カスタマイズされた起動コードで構成されているにもかかわらず、多くのライブラリ関数を使用するアプリケーションを作成できます。これには、以下のいずれかを実行する必要があります。
  • 初期化を必要とする関数を使用しないようにします。
  • 初期化関数および低レベルサポート関数を指定します。
再実装しなければならない関数は、どの程度のライブラリ機能を必要とするかによって異なります。
  • 除算、構造体コピー、浮動小数点算術演算用のコンパイラサポート関数のみが必要な場合は、__rt_raise() を用意する必要があります。これにより、errno.h および setjmp.h に含まれている非常に単純なライブラリ関数と、string.h のほとんどの関数も使用できるようになります。
  • setlocale() を明示的に呼び出すと、ロケール依存関数がアクティブになります。その結果、atoi ファミリ、sprintf()sscanf()ctype.h 内の関数が使用できるようになります。
  • デフォルトでは armclang は完全な IEEE 演算を使用しているため、__rt_fp_status_addr() が常に必要です。
  • fprintf() または fputs() を使用する関数がある場合、高レベル入出力サポートを実装する必要があります。高レベル出力関数は、fputc() および ferror() に依存します。また、高レベル入力関数は、fgetc() および __backspace() に依存します。
これらの関数およびヒープを実装すると、ライブラリのほぼ全体を使用できるようになります。
関連する概念
1.7.2 C ライブラリを使用せずにベアマシン C としてアプリケーションを作成
1.6.1 アプリケーションでの C ライブラリの使用
1.7.4 ベアマシン整数 C
1.7.7 C ライブラリを使用する場合の低レベル関数の使用
1.7.8 C ライブラリを使用する場合の高レベル関数の使用
1.7.9 C ライブラリを使用する場合の malloc() の使用
関連する参考文書
1.7.1 C ライブラリを使用しないアプリケーションの作成
1.5.5 C ライブラリによる __user_libspace スタティックデータ領域の使用
1.12 C および C++ ライブラリでの入出力関数のカスタマイズ
非機密扱いPDF file icon PDF 版ARM DUI0808CJ
Copyright © 2014, 2015 ARM.All rights reserved.