RealView ® CompilationTools デベロッパガイド

バージョン 3.1


Table of Contents

序章
本書について
対象読者
本書の構成
表記規則
参考資料
フィードバック
RealView Compilation Tools に関するフィードバック
本書に関するフィードバック
1. はじめに
1.1. RVCT について
1.1.1. サンプルの使用方法
1.2. ARM プロセッサをターゲットとした開発
1.2.1. 組み込みソフトウェアの開発
1.2.2. ARM コードと Thumb コードのインターワーク
1.2.3. C、C++、およびアセンブリ言語の混用
1.2.4. プロセッサ例外処理
1.2.5. AAPCS の使用
1.2.6. 従来のオブジェクトおよびライブラリとの互換性
2. 組み込みソフトウェアの開発
2.1. 組み込みソフトウェアの開発について
2.1.1. サンプルコード
2.2. ターゲットシステムが存在しない場合の RealView CompilationTools のデフォルトの動作
2.2.1. セミホスティング
2.2.2. C ライブラリの構造
2.2.3. デフォルトのメモリマップ
2.2.4. リンカの配置規則
2.2.5. アプリケーションの起動
2.2.6. ビルド 1 のサンプルコード
2.3. ターゲットハードウェアに合わせた C ライブラリのカスタマイズ
2.3.1. C ライブラリのターゲット変更
2.3.2. C ライブラリのセミホスティングの無効化
2.3.3. ビルド 2 のサンプルコード
2.4. ターゲットハードウェアに合わせたイメージのメモリマップのカスタマイズ
2.4.1. 分散ロード
2.4.2. 分散ロード記述ファイルの構文
2.4.3. 分散ロード記述ファイルの例
2.4.4. 分散ロード記述ファイルでのオブジェクトの配置
2.4.5. ルート領域
2.4.6. スタックとヒープの配置
2.4.7. ランタイムメモリモデル
2.4.8. ビルド 3 のサンプルコード
2.4.9. ARMv6-M および ARMv7-Mメモリマップ
2.5. リセットと初期化
2.5.1. 初期化シーケンス
2.5.2. ベクタテーブル
2.5.3. ROM/RAM のリマップ
2.5.4. ローカルメモリのセットアップに関する注意事項
2.5.5. 分散ロードとメモリのセットアップ
2.5.6. スタックポインタの初期化
2.5.7. ハードウェアの初期化
2.5.8. 実行モードに関する注意事項
2.5.9. ビルド 4 のサンプルコード
2.6. メモリマップに関するその他の注意事項
2.6.1. 分散ロード記述ファイルでのターゲットのペリフェラルの配置
2.6.2. ビルド 5 のサンプルコード
3. 位置非依存コードとデータの記述
3.1. 位置非依存
3.1.1. AAPCS の使用
3.2. 読み出し専用の位置非依存
3.2.1. ROPI に関連するレジスタの使用方法
3.2.2. ROPI の C コードおよびアセンブラコードの記述
3.2.3. コードのリンク
3.2.4. FPIC アドレス指定
3.2.5. サンプルコード
3.3. 読み出し - 書き込みの位置非依存
3.3.1. 再入可能ルーチン
3.3.2. RWPI に関連するレジスタの使用方法
3.3.3. 位置非依存データのアドレス指定
3.3.4. アセンブリ言語を使用した RWPI の記述
3.3.5. コードのリンク
3.3.6. サンプルコード
4. ARM と Thumb のインターワーク
4.1. インターワークについて
4.1.1. AAPCS の使用
4.1.2. インターワークに適した状況
4.1.3. /interwork オプションの使用
4.1.4. インターワーク呼び出しの検出
4.1.5. リンカによって生成されるベニア
4.2. アセンブリ言語のインターワーク
4.2.1. 分岐命令と切り替え命令
4.2.2. アセンブラモードの変更
4.2.3. ARM ヘッダのサンプル
4.2.4. ARM アーキテクチャ v5T 以降とのインターワーク
4.2.5. Thumb コード内のラベル
4.3. C と C++ のインターワークとベニア
4.3.1. インターワーク用コードのコンパイル
4.3.2. C と C++ のインターワークに関する基本的な規則
4.3.3. Thumb 状態の関数へのポインタ
4.3.4. 同一関数の 2 つのコピーの使用
4.4. ベニアを使用したアセンブリ言語のインターワーク
4.4.1. ベニアを使用したアセンブリ言語のみのインターワーク
4.4.2. ベニアを使用した C、C++、およびアセンブリ言語のインターワーク
5. C、C++、およびアセンブリ言語の混用
5.1. インラインアセンブラと組み込みアセンブラの使用
5.1.1. インラインアセンブラの機能
5.1.2. 組み込みアセンブラの機能
5.1.3. インラインアセンブリコードと組み込みアセンブリコードの相違点
5.2. アセンブリコードから C グローバル変数へのアクセス
5.3. C++ からの C ヘッダファイルの使用
5.3.1. システム C ヘッダファイルのインクルード
5.3.2. 独自の C ヘッダファイルのインクルード
5.4. C、C++、およびアセンブリ言語間の呼び出し
5.4.1. 複数言語間の呼び出しに関する一般規則
5.4.2. C++ に関する情報
5.4.3. 言語間の呼び出しのサンプル
6. プロセッサ例外処理
6.1. プロセッサ例外について
6.1.1. 例外のタイプ
6.1.2. ベクタテーブル
6.1.3. 例外によるモードとレジスタの使用
6.1.4. 例外の優先度
6.2. プロセッサ状態の判断
6.3. 例外の開始と終了
6.3.1. 例外に対するプロセッサの応答
6.3.2. 例外ハンドラからの復帰
6.3.3. 復帰アドレスと復帰命令
6.4. 例外処理
6.5. 例外ハンドラのインストール
6.5.1. 例外ハンドラをインストールする方法
6.5.2. リセット時のハンドラのインストール
6.5.3. C 言語からのハンドラのインストール
6.6. SVC ハンドラ
6.6.1. 呼び出す SVC の決定
6.6.2. アセンブリ言語を使用した SVC ハンドラ
6.6.3. C 言語およびアセンブリ言語を使用した SVC ハンドラ
6.6.4. スーパーバイザモードでの SVCの使用
6.6.5. アプリケーションからの SVC の呼び出し
6.6.6. アプリケーションからの動的な SVC の呼び出し
6.7. 割り込みハンドラ
6.7.1. 外部割り込みのレベル
6.7.2. C 言語を使用した単純な割り込みハンドラの記述
6.7.3. 再入可能割り込みハンドラ
6.7.4. アセンブリ言語を使用した割り込みハンドラのサンプル
6.8. リセットハンドラ
6.9. 未定義命令ハンドラ
6.10. プリフェッチアボートハンドラ
6.11. データアボートハンドラ
6.12. システムモード
7. Handling Cortex-M3 Processor ExceptionsCortex-M3 プロセッサ例外処理
7.1. Cortex-M3 プロセッサ例外について
7.1.1. 動作および実行モード
7.1.2. メインスタックおよびプロセススタック
7.1.3. 例外番号
7.1.4. ベクタテーブル
7.1.5. イベント
7.1.6. 例外の優先度およびプリエンプション(横取り)
7.1.7. ネストされたベクタ割り込みコントローラ
7.2. 例外テーブルの書き込み
7.3. 例外ハンドラの書き込み
7.4. 例外テーブルの配置
7.5. システム制御空間レジスタの設定
7.6. 個別の IRQ の設定
7.6.1. 割り込み優先度
7.7. スーパーバイザコール
7.8. システムタイマ
7.8.1. SysTick の設定
7.9. 他の ARM プロセッサ用に記述された例外処理コードの移植
7.9.1. 重要なセクションおよび例外動作
8. デバッグ通信チャネル
8.1. デバッグ通信チャネルについて
8.2. ターゲットのデータ転送
8.3. デバッグ通信のポーリング
8.3.1. 通信データ制御レジスタ
8.3.2. ターゲットからデバッガへの通信
8.3.3. デバッガからターゲットへの通信
8.4. 割り込み駆動型デバッグ通信
8.5. Thumb 状態からのアクセス
A. セミホスティング
A.1. セミホスティングについて
A.1.1. セミホスティングとは
A.1.2. セミホスティングインタフェース
A.2. セミホスティングの実装
A.2.1. RealView ARMulator ISS
A.2.2. RealView ICE
A.2.3. Instruction Set System Model
A.2.4. RealMonitor
A.3. セミホスティングオペレーション
A.3.1. angel_SWIreason_EnterSVC(0x17)
A.3.2. angel_SWIreason_ReportException(0x18)
A.3.3. SYS_CLOSE(0x02)
A.3.4. SYS_CLOCK (0x10)
A.3.5. SYS_ELAPSED(0x30)
A.3.6. SYS_ERRNO(0x13)
A.3.7. SYS_FLEN (0x0C)
A.3.8. SYS_GET_CMDLINE(0x15)
A.3.9. SYS_HEAPINFO(0x16)
A.3.10. SYS_ISERROR (0x08)
A.3.11. SYS_ISTTY (0x09)
A.3.12. SYS_OPEN (0x01)
A.3.13. SYS_READ(0x06)
A.3.14. SYS_READC (0x07)
A.3.15. SYS_REMOVE(0x0E)
A.3.16. SYS_RENAME (0x0F)
A.3.17. SYS_SEEK (0x0A)
A.3.18. SYS_SYSTEM(0x12)
A.3.19. SYS_TICKFREQ (0x31)
A.3.20. SYS_TIME (0x11)
A.3.21. SYS_TMPNAM(0x0D)
A.3.22. SYS_WRITE (0x05)
A.3.23. SYS_WRITEC (0x03)
A.3.24. SYS_WRITE0(0x04)
A.4. デバッグエージェントインタラクション SVC

著作権

® または ™ のマークが付いた言葉およびロゴは、ARM Limited が所有する登録商標または商標です。本書に記載されている他の製品名は、各社の所有する商標です。

本書に記載されている情報の全部または一部、ならびに本書で紹介する製品は、著作権所有者の文書による事前の許可を得ない限り、転用・複製することを禁じます。

本書に記載されている製品は、今後も継続的に開発・改良の対象となります。 本書に含まれる製品およびその利用方法についての情報は、ARMが利用者の利益のために提供するものです。 したがって当社では、製品の市販性または利用の適切性を含め、暗示的・明示的に関係なく一切の責任を負いません。

本書は、本製品の利用者をサポートすることだけを目的としています。 本書に記載されている情報の使用、情報の誤りまたは省略、あるいは本製品の誤使用によって発生したいかなる損失・損傷についても、ARMLimited は一切責任を負いません。

ARM という用語が使用されている場合は、"ARM または必要に応じてその子会社"を指します。

機密保持ステータス

本書は非機密扱いであり、本書を使用、複製、および開示する権利は、ARMおよび ARM が本書を提供した当事者との間で締結した契約の条項に基づいたライセンスの制限により異なります。

製品ステータス

本書の情報は最終版であり、開発済み製品に対応しています。

Revision History
Revision A 2002年 8 月 第 1.2 版
Revision B 2003年 1 月 第 2.0 版
Revision C 2003年 9 月 RVDS v2.0 リリース(第 2.0.1 版)
Revision D 2004年 1 月 RVDS v2.1 リリース(第 2.1 版)
Revision E 2004年 12 月 RVDS v2.2 リリース(第 2.2 版)
Revision F 2005年 5 月 RVDS v2.2 SP1 リリース(第 2.2版)
Revision G 2006年 3 月 RVDS 3.0 リリース(第 3.0 版)
Revision H 2007年 3 月 RVDS v3.1 (リリース 3.1)
Copyright © 2002-2007 ARM Limited. All rights reserved. ARM DUI 0203HJ
Non-Confidential