カスタマーサポートセンター

FAQ~よくある質問~ | FAQマスタ詳細表示

FAQ詳細情報

ID 10810578
FAQカテゴリ(大) アセンブラ
最終更新日 2014-01-26

質問内容

TN86655: GCCインラインアセンブラをEWARMに移植する

回答内容

EWのターゲット : ARM
EWのコンポーネント : C/C++コンパイラ
キーワード : インラインアセンブラ、マイグレーション
更新日 : January 21, 2011

謝辞
これらのサンプルは、ヨーロッパ、スロバキア、ブラチスヴァ、 Pasat の Ivan Paulik氏 が作成したものです。調べていただいたことを EWARM のユーザに公開していただきとても感謝しています。


適用
このテクニカルノートは ARM7/9 Cortexデバイスに適用されます。

 

背景
従来より「GCCからEWARMへの移行ガイド」のリクエストがあります。IARは他にもマイグレーションガイドを作成していますから、取るに足らない仕事であるとお考えになるかも知れませんが、GCCのバージョンはいくつかあるため、決して楽な仕事ではありません。

 

提案:
GCC と EWARM で一番異なる領域であるインラインアセンブラとその構造 (と、他の問題) について、このテクニカルノート (と、添付のドキュメント)でコメントします。 このテクニカルノートのゴールは、9つのサンプルプロジェクトとコメントが、GCC と EWARM の最も大きな違いとその他の問題を、マイグレーションを行う開発者が整理することができるようになることです。

 

一般的なコメント:
GCCはユーザーにもっと多くの責任を与えますが、EWARMは代わりに、キーワード、組み込み関数 (intrinsic function) 及び/または、アプリケーションの同じ構文をカバーする構文を使用します。

 

サンプルプロジェクト:

EXAMPLE 1 -- MPUの1つのレジスタを参照するコード
汎用レジスタを読んだり使用したりせずに、このような構文を書き直してください。サンプルプロジェクトに注釈があるように、ICCARM は、R0レジスタを再使用し、ランタイムでのエラーが発生する大きな危険があります。

EXAMPLE 2 -- SWI 命令の使用
GCC 構文を EWARM のキーワード __SWI で置き換えてください。

EXAMPLE 3 -- インラインアセンブラからの引数付き関数の呼び出し
インライン・アセンブラの使用は最小限にして、コンパイラを効果的に使うため、これはEWARM で使用するべきではありません。IAR は インラインアセンブラを、実際のアセンブラ関数としてアセンブラファイルに書き直すことを勧めています。

EXAMPLE 4 -- プロローグとエピローグ無い関数の使用
GCC 構文を維持することには、高い危険性があります。IAR は インラインアセンブラを、実際のアセンブラ関数としてアセンブラファイルに書き直すことを勧めています。

EXAMPLE 5 -- パックされたデータ構造体の使用
これは、構文を GCC から EWARM 書き変える方法を説明しています。

EXAMPLE 6 -- セグメントの開始、終了その他の参照
EWARM のセクション演算子を使用して書き直してください。

EXAMPLE 7 -- 暗黙の引数/戻り値のハンドリングをせずに、独自の prolog と epilog を使用。GCC 構文を取り除き、代わりに Interwork オプションを使用してください。

EXAMPLE 8 -- 割り込み関数の使用
これは、構文を GCC から EWARM 書き変える方法を説明しています。

EXAMPLE 9 -- データ構造をそろえる
これは、構文を GCC から EWARM 書き変える方法を説明しています。

注意:
このテクニカルノートは、全ての GCCから EWARM への変換の問題点をカバーしていませんが、少なくとも、マイグレーションの1つのスタート地点と言えます。

参考資料URL