• 検索結果がありません。

株式会社 DTS インサイト ARM-AN-225A ADS から RVDS3.0 への移行について 本ドキュメントはARM 社の提供する Application Note 171 Migrating from ADS to RVDS 3.0 (ARM DAI 171A) の内容に基づき作成されたも

N/A
N/A
Protected

Academic year: 2021

シェア "株式会社 DTS インサイト ARM-AN-225A ADS から RVDS3.0 への移行について 本ドキュメントはARM 社の提供する Application Note 171 Migrating from ADS to RVDS 3.0 (ARM DAI 171A) の内容に基づき作成されたも"

Copied!
13
0
0

読み込み中.... (全文を見る)

全文

(1)

ADS から RVDS3.0 への移行について

本ドキュメントはARM社の提供する Application Note 171 “Migrating from ADS to RVDS 3.0”(ARM DAI 171A)の内容 に基づき作成されたものです。内容につきましては全て上記ドキュメントをマスターといたしておりますので、ご使用の 際には必ず上記ドキュメントを参照の上、本ドキュメントは参考資料として用いる形をお取りくださいますようお願い申 し上げます。

(2)

1. Introduction ... 3 1.1 スコープ ... 3 1.2 ツール構造の変更 ... 3 1.3 RVDS3.x の主な機能 ... 3 1.4 1 台のマシンに複数のツールバージョンをインストールする ... 4 2. ソースコードの変更 ... 5 2.1 C および C++ソースコードの変更 ... 5 2.1.1 インラインアセンブラ(__asm) ... 5 2.1.2 ライブラリ呼び出しの変更 ... 6 2.1.3 データの変更 ... 7 2.1.4 C++コードの変更 ... 7 2.2 アセンブラソースコードの変更 ... 8 2.3 リンカ入力ファイルの変更 ... 9 2.4 ARM アーキテクチャ 6 以降のサポート ... 9 3. makefile の変更 ... 10 3.1 全てのビルドツールに影響のある変更 ... 10 3.1.1 POSIX スタイルスイッチの使用 ... 10 3.2 C および C++コンパイラオプションの変更 ... 10 3.2.1 コンパイラの呼び出し ... 10 3.2.2 デフォルト動作の変更 ... 10 3.2.3 非推奨化および廃止されたコンパイラオプション ... 10 3.3 リンカ使用法の変更 ... 11 3.4 IDE プロジェクトファイルの変更 ... 11 3.5 デバッグにおける変更 ... 11 4. リファレンスおよびさらなる情報 ... 13

(3)

1. Introduction

1.1 スコープ

当アプリケーションノートは ARM Developer Suite(ADS)v1.x のユーザが、最新の RealView Development Suite(RVDS)3.x に開発プラットフォームを移行する際の補助となることを目的としています。 このドキュメントは、RVDS2.x ツールチェインを考慮していませんが、ここでのいくつかの変更点は 2.x に も適用されることがあります。 このドキュメントは ARM ツールシンタックスやその他の特性を熟知されていることを想定しています。特定 のシンタックスに関する説明が必要な場合は、適切なツールチェインとともに提供されるドキュメントを参 照してください。 注:本ドキュメントは、その機能が同等な ADS プロジェクトのビルド動作を阻害しない限り、RVDS の新機能 (リンカフィードバックなど)の使用方法については触れません。 1.2 ツール構造の変更 RVDS では、ARM および Thumb の設定において、C および C++コンパイラの別々のコンポーネントではなく、単 一の実行形式 armcc の形をとります。旧 makefile との互換を保つために、以前の名前も認識可能ですが、 ビルド環境を新しいネーミング構造に変えるよう促されます。これはこのドキュメントの 3.2.1 項で触れま す。

RealView Debugger(RVD)は、AXD または armsd よりも推奨サポートされるデバッガです。RealView ICE(RVI) は Multi-ICE よりも JTAG デバッグコントロールユニットとして推奨されます。RealView Trace(RVT)はトレ ースキャプチャユニットとして Multi-Trace の置き換えとして推奨されます。RVT を使用するには RVI が必 要です。 1.3 RVDS3.x の主な機能 全てのユーザにおいて、RVDS が ADS 以上のコードサイズとパフォーマンスの改善による利益をもたらします。 ARM アーキテクチャ 6 以降を実装したプロセッサの開発者は、これらのアーキテクチャバージョンが ADS で はサポートされていないため、あたらしいツールチェインに移行する必要があります。 RVDS で生成されたコードは ARM アーキテクチャ用 ABI をサポートしており、RVDS オブジェクトコードと他の ABI 準拠ツールチェインのユーザとシェアすることが可能です。これは例えば RVDS を使って Linux アプリケ ーションの開発を行い、それらの伝統的な GNU ベースの開発環境を使用するなどのことを可能にします。こ のトピックは別の ARM 社のウェブサイトからダウンロード可能な、Application Note(#150)に記載されてい ます: http://www.arm.com/documentation/Application_Notes/index.html ABI に関するドキュメントは以下の ARM 社のウェブサイトからダウンロード可能です: http://www.arm.com/products/DevTools/ABI.html コンパイラおよびアセンブラオプション--apcs /adsabi は削除されたことに注意してください。詳細につ いては、3.3 章”リンカ使用法の変更”を参照してください。

(4)

1.4 1 台のマシンに複数のツールバージョンをインストールする ADS では、バージョンが異なっても 1 台のマシンには 1 つのソフトウェアのみインストール可能でした。RVDS では複数のバージョンをインストールすることができ、1 つの ADS(全バージョン可)がインストールされたマ シン上にもそれが可能となります。 ARM は異なったバージョンの開発ツールを切り替えて使用することのできるユーティリティを提供していま す。この”SuiteSwitcher”ユーティリティは、ARM ウェブサイト内のテクニカルサポートダウンロードセクシ ョンにあります: http://www.arm.com/support/downloads/

(5)

2. ソースコードの変更

このセクションでは、ADS のかわりに RVDS 3.0 でビルドを行うために必要とされる可能性のあるソースコー ドの変更について述べます。 2.1 C および C++ソースコードの変更 一般的なルールでは、ANSI C および ISO C++スタンダード準拠のソースコードは変更する必要がありません。 ADS は完全な ISO C++サポートを行っていませんでしたので、以前サポートされていなかった機能を使用でき るようにするために ADS C++ソースを再確認することは有効でしょう。しかしこれは要求事項ではありませ ん。 一部の ARM ツールに特化した機能は変更または廃止されており、変更が必要となる可能性があります。 2.1.1 インラインアセンブラ(__asm) C コンパイラはビルトインインラインアセンブラを実装しています。しかしながら、これは ARM アーキテク チャ V6 以降の命令セットには対応していません。全てのインラインアセンブラコードを可能な限り組み込み アセンブラに移行するか、コンパイラ組み込み関数を利用するようにすることを推奨します。 注:Thumb のインラインアセンブラはサポートされなくなっています。そのような ADS からのコードは修正 が必要です。 注:マシンレジスタの直接参照はコンパイルエラーになります。 例 2.1 - インラインアセンブリコードの組み込みアセンブラへの移行

const int Q_Flag=0x08000000; /* Q flag is bit 27 of PSR */

/* Inline Assembly Example */

int Clear_Q_flag (void){ int old_psr, new_psr, result; __asm {

MRS old_psr, CPSR

BIC new_psr, old_psr, #Q_Flag AND result, old_psr, #Q_Flag MSR CPSR_f, new_psr

} }

return result; }

/* Embedded Assembly Example */

__asm int Clear_Q_flag (void){ MRS r0, CPSR

BIC r1, r0, #__cpp( Q_Flag ) AND r0, r0, #__cpp( Q_Flag ) MSR CPSR_f, r1

(6)

例 2.2 - インラインアセンブリコードのコンパイラ組み込み関数への移行

/* Inline Assembly Example */

__inline int current_sp(void) {

int temp;

__asm { mov temp, sp} return temp;

} …

current_sp();

/* Compiler Intrinsic Example */

__current_sp();

2.1.2 ライブラリ呼び出しの変更

ADS 1.x では浮動小数点引数を使用しない最適化されたバージョンの printf および scanf ファミリ関数を 使用していました。RVDS 3.x ではこれらの関数の特定の引数のタイプによって最適化された、複数のバリア ントがあります。もしこれらの関数をリターゲットされていたなら、各バリアントをサポートするリターゲ ットコードを修正する必要があります。ARM 社のウェブサイト内テクニカルサポートセクションの、"How do the ARM Compilers handle printf, sprintf, fprintf, and scanf”:

http://www.arm.com/support/faqdev/4971.html

または、弊社 FAQ、”ARM コンパイラは、printf,sprintf,fprintf,scanf をどのように扱いますか。”: https://www.dts-insight.co.jp/support/support_arm/?m=ARMFaqInfo&item=&id=460 を参照してください。 注:以下のコンパイラオプションを選択すると、この最適化を RVCT で無効にできます: --library_interface=aeabi_clib 一部の__rt_*から始まるライブラリ関数は、ABI にあわせて__aeabi_*の形にリネームされました。これ らの関数をリターゲットしている場合、関数名を変更する必要があります。このような関数を ABI ネーミン グ規約をサポートするように再実装するソースを変更する必要があります。このような関数の一例(完全なリ ストではありません)を表 2.1 に示します。 表 2.1 ライブラリ関数の ABI リネーム例 ADS のネーミング RVDS のネーミング __rt_memcpy_w __aeabi_memcpy4 __rt_div0 __aeabi_idiv0 __rt_sdiv __aeabi_idiv __rt_udiv __aeabi_uidiv __rt_errno_addr __aeabi_errno_addr __rt_fp_status_addr __aeabi_fp_status_addr

(7)

2.1.3 データの変更 ADS では、全ての初期化された(“RW”)データは ELF 出力ファイル内の RW セクションに配置されました。RVDS では、デフォルトでそのようなデータは 8 バイト以上のサイズを持つ場合のみ ELF 出力中の RW セクションに おかれ、そうでない場合は、.bss(ZI)セクションに配置されます。これはスタートアップ時のスキャッタロ ーディング実行にかかる時間を短くします。しかし、コンパイラによるそのようなデータに対する配置を想 定するようなコードが含まれていた場合、システムの処理に影響を与える可能性があります。 注:コンパイラオプションによって ADS の振る舞いに戻すことができます: --bss_threshould=0

ARM 社のウェブサイト内テクニカルサポートセクションの、'Placement of small global ZI data (<= 8 bytes) in memory': http://www.arm.com/support/faqdev/5673.html または、弊社 FAQ、” RVCTv2.1 以降で、RVCTv2.0.1 では ZI セクションに配置されていた変数が RW セク ションに配置されます。”: https://www.dts-insight.co.jp/support/support_arm/?m=ARMFaqInfo&item=&id=452 を参照してください。 コンパイラでは同様にメモリマップされた read-only のペリフェラルの定義に一般的に用いられる volatile const のデータタイプの扱いが変更されています。RVCT は ISO C スタンダードによって指 定されているようにそのようなデータを RW または ZI(先述のデータのサイズに依存して)セクションに 配置します。ADS ではこのようなデータを RO セクションに配置していました。この場合も、配置を想定 するようなコードが含まれていた場合、システムの処理に影響を与える可能性があります。 2.1.4 C++コードの変更 ADS と RVDS の C++オブジェクトには互換性がありません。そのため、全ての ADS の C++オブジェクトは他の RVDS C++オブジェクトコードとリンクをするために、RVDS C++コンパイラでリコンパイルする必要がありま す。 RVCT は ADS では行われていなかった、完全 ISO C++サポートを提供します。そのため、以前サポートされて いなかった、より効果的な機能を再実装することができるかどうか、全ての C++コードにおいて調査するこ とを推奨します。 C++ネームマングリングスキームは変更されており、そのためマングリングされた C++シンボル名を直接参照 しようとする全てのコードは更新する必要があるでしょう。 もし C++に特化したライブラリコードの呼び出しをするような初期化コードを用いている場合、ABI 準拠のネ ーミングをサポートするよう修正する必要があるでしょう。例えば、__cpp_initialize should の呼び 出しは__cpp_initialize_aeabi に変更します。

(8)

2.2 アセンブラソースコードの変更 ADS で書かれた良いアセンブラのコードは RVDS でもアセンブルすることができます。全てのパブリックイン ターフェイスにおいて、スタックが 8 バイトアラインされなければならない ABI の要求事項の一つに注意し てください。 オブジェクトにおいて、8 バイトアライメントが保持されていれば、RVDS のアセンブラは生成されたオブジ ェクトファイルに対し、正しくビルド属性をセットするでしょう。そうでなければ、このような不整合はリ ンク時にエラーを発生させる可能性があります。この場合ソースコードを変える必要があります。解決方法 は、通常関数の出入り口で追加のレジスタを push/pop することです。 注:Pre-UAL(古い)アセンブリコードもサポートされます。しかしながらディスアセンブリツールは統合アセ ンブラ言語(UAL)を出力するでしょう。UAL の変更点の詳細については、RVDS 3.0 Assembler Guide 内のセク ション 2.2 を参照してください。

例 2.3 - ABI および UAL をサポートするアセンブラソースへの変更

AREA ADSexample, CODE

CODE32 IMPORT foo start MOV r0, #0x10 MOV r1, #3 BL subroutine stop MOV r0, #0x18 LDR r1, =0x20026 SWI 0x123456 subroutine STMFD r13!, {r4, lr} BL foo LDMFD r13!, {r4, pc}

AREA RVDSexample, CODE

ARM IMPORT foo Start MOV r0, #0x10 MOV r1, #3 BL subroutine stop MOV r0, #0x18 LDR r1, =0x20026 SVC 0x123456 subroutine

PUSH {r4, lr} ; 8-byte stack ; alignment

BL foo

(9)

2.3 リンカ入力ファイルの変更 セクション 2.1.4 で述べている通り、ADS と RVDS で生成した C++オブジェクトには互換性がなく、ユーザは ADS が生成した C++オブジェクトを RVDS でビルドしたオブジェクトとともに使用したい場合は、それらをリ コンパイルする必要があります。 ADS 用スキャッタ定義ファイルは RVDS でも動作しますが、ルートリージョンに配置されるべき C ライブラリ コードを明示的に参照している場合、これらのリージョンの定義が例 2.4 に示すように変わっていることに 注意してください。 例 2.4 - スキャッタ定義ファイルの変更 ; ADS Example LOAD <base_address> { ROOT <base_address> { __main.o (+RO) * (Region$$Table) * (ZISection$$Table) } } ; RVDS Example LOAD <base_address> { ROOT <base_address> { * (InRoot$$Sections) } } 2.4 ARM アーキテクチャ 6 以降のサポート コンパイラから ARM アーキテクチャ 6 以降の命令を生成させたい場合、ビルドコマンドにおいて適切な--cpu オプションを使用するだけでかまいません。アセンブラを使用する場合は、そのような命令を使用するよう にアセンブリコードを修正し、且つ、適切な--cpu オプションを使用してください。 リンク時、新しいアーキテクチャをサポートするようにビルドされたオブジェクトとリンクする場合、アー キテクチャに固有な命令を使用していなくとも、リンカはアーキテクチャをサポートするライブラリコード を使用します。これによって、もしそのようなアーキテクチャをサポートしていないターゲットで動作させ ると未定義命令例外が発生することがあります。 このような状況が発生した場合、各オブジェクト(ユーザ定義ライブラリ内のものも含む)が新しいアーキテ クチャ用にビルドされているかどうかを確認するためにチェックする必要があるでしょう。この属性を設定 する唯一の方法はオブジェクトの初期ビルド時に--cpu オプションを指定する事である点に注意してくださ い。

(10)

3. makefile の変更

このセクションでは、RVDS に移行を行う際に変更が必要となる可能性のあるコマンドラインオプションにつ いて述べます。 3.1 全てのビルドツールに影響のある変更 3.1.1 POSIX スタイルスイッチの使用 RVDS では、現在マルチキャラクタコンパイラオプションを 2 つのハイフンで指定する POSIX フォーマットを 使用しています。ツールはこれらが付けられていない場合ワーニングを返します。例えば、ADS オプション の-cpu は、--cpu に変更する必要があります。限定タグに続くシングルキャラクタスイッチは依然、1 つの ハイフンによって指定されることに注意してください。例えば、最適化設定-O2(-O<最適化レベル>)は RVDS では 1 つのハイフンのみを要求します。 3.2 C および C++コンパイラオプションの変更 3.2.1 コンパイラの呼び出し 下位互換性を保つための実行形式ラッパーを提供している 3.0 リリースにおいて、厳密に必要とはされてい ないうちに別々のコンパイラを呼び出さないようにすることを推奨します。表 3.1 に従ってコマンドを変更 すべきです。 表 3.1 コンパイラ呼び出しの変更 ADS 方式 RVDS 方式 暗黙の RVDS でのデフォルト

armcc armcc --c90 --arm

tcc armcc –-thumb --c90

armcpp armcc –-cpp --arm

tcpp armcc –-thumb --cpp

3.2.2 デフォルト動作の変更

デバッグテーブル生成(-g)が有効の場合 ADS のデフォルトの最適化レベルは-O0 であり、無効の場合は-O2 でした。RVDS ではこの変更についてワーニングが発生しますが、デフォルトの最適化レベルは常に-O2 です。 Warning: C3010W: -g defaults to -O2 if no optimisation level is specified

3.2.3 非推奨化および廃止されたコンパイラオプション

今後サポートされない、また、可能であればそれらの RVDS における代替のコンパイラオプションの詳細につ いては、RVDS 3.0 Compiler and Libraries Guide の Table E-2 を参照してください。

(11)

3.3 リンカ使用法の変更

リンカはオブジェクトの関数インターフェースにおける 8 バイトスタックアライメントを含む ABI 互換性を より厳密にチェックする事に注意してください。8 バイトスタックアライメントを保持しないオブジェクト のリンク時に以下のリンカエラーが発生します:

Error: L6238E: foo.o(.text) contains invalid call from '~PRES8' function to 'REQ8' function

コンパイラおよびアセンブラオプション--apcs /adsabi は RVDS コンパイラに ADS プロシジャコールスタ ンダードと互換なオブジェクトを生成させますが、RVDS3.0 以降はサポートされません。ARM は ADS のコード を RVDS で全てリビルドすることを強く推奨しています。

この項目に関する詳細な解説は、ARM 社の FAQ エントリ内、"Are legacy ADS objects/libraries compatible with RVCT2.x ?”: http://www.arm.com/support/faqdev/1347.html または、弊社 FAQ、” RVCT2.x と ADS で生成したオブジェクトやライブラリの互換性はありますか。”: https://www.dts-insight.co.jp/support/support_arm/?m=ARMFaqInfo&item=&id=960 を参照してください。 注:ADS でビルドされた C++オブジェクトは RVDS でビルドされたものと互換性がありません。 3.4 IDE プロジェクトファイルの変更

ADS と RVDS の両方において、それぞれ MetroWerks 社の’CodeWarrior IDE’を提供しており、ADS のプロジェク トを RVDS でインポートすることはできますが、逆はできません。ユーザは手作業で上記のセクション毎にコ ンパイラオプションを手作業で対応させる必要がある可能性があります。

同様に、プロジェクトマネージメント他の機能において Eclipse フレームワークユーティリティを RVDS とと もに使うこともできます。Eclipse については、http://www.eclipse.org を参照してください。ARM がフレ ームワークに対して行ったインテグレーションについては、http://www.arm.com/eclipseを参照してくださ い。

ARM は CodeWarrior プロジェクト(.mcp)を Eclipse やその他のビルド環境にインポートすることができるよ う、makefile にポーティングするのを補助する mcp2make ユーティリティを提供しています。これは、ARM 社の web サイト内ダウンロードセクションから取得できます:

http://www.arm.com/support/downloads/

3.5 デバッグにおける変更

AXD は ADS とともに提供されるデバッガで、JTAG 接続では Multi-ICE が推奨されるソリューションでした。 トレースが必要な場合、Multi-Trace が推奨されるソリューションでした。RVDS では推奨されるデバッガは RVI および RVT と接続する RVD です。

(12)

もし AXD のデバッグセッションで使用していた AXD スクリプトがあれば、RVD のフォーマットにスクリプト を変換するのを補助する axd2rvd という名前のユーティリティが RVDS とともに提供されます。

axd2rvd -I axd.txt -O rvd.txt

また、RVD 3.0 User Guide 内、appendix C.3 'Comparison of RealView Debugger and AXD commands'また は appendix D.1 'Comparison of RealView Debugger and armsd commands'も参考になります。

注:AXD およびコマンドラインデバッガ armsd は非推奨となり、将来のツールバージョンではサポートされ ない予定です。

(13)

4. リファレンスおよびさらなる情報

ARM ツールの追加情報は関連する RVCT 3.0 ドキュメンテーションで見つけることができます:

RVCT 3.0 Compiler and Libraries Guide (ARM DUI 0205G)

RVCT 3.0 Linker and Utilities Guide (ARM DUI 0206G)

RVCT 3.0 Developer Guide (ARM DUI 0203G)

RVD 3.0 User Guide (ARM DUI 0153H)

RVD 3.0 Essentials Guide (ARM DUI 0181H)

ARM アーキテクチャの ABI の完全なドキュメンテーションは以下で参照できます:

http://www.arm.com/products/DevTools/ABI.html ARM 社 web サイト内、ARM Software Tools FAQ のページ:

http://www.arm.com/support/devfaqsindex.html

参照

関連したドキュメント

られてきている力:,その距離としての性質につ

この 文書 はコンピューターによって 英語 から 自動的 に 翻訳 されているため、 言語 が 不明瞭 になる 可能性 があります。.. このドキュメントは、 元 のドキュメントに 比 べて

ADS-Family ADS-win/ADS-LAX/ADS-LA BT-AC ADS-BT for ARCHICAD BT-RV ADS-BT for Revit.. BT-VW ADS-BT

および皮膚性状の変化がみられる患者においては,コ.. 動性クリーゼ補助診断に利用できると述べている。本 症 例 に お け る ChE/Alb 比 は 入 院 時 に 2.4 と 低 値

ひかりTV会員 提携 ISP が自社のインターネット接続サービス の会員に対して提供する本サービスを含めたひ

これはつまり十進法ではなく、一進法を用いて自然数を表記するということである。とは いえ数が大きくなると見にくくなるので、.. 0, 1,

現行の HDTV デジタル放送では 4:2:0 が採用されていること、また、 Main 10 プロファイルおよ び Main プロファイルは Y′C′ B C′ R 4:2:0 のみをサポートしていることから、 Y′C′ B

関係会社の投融資の評価の際には、会社は業績が悪化