GCCインラインアセンブラをEWARMに移植する
テクニカル・ノート 86655
アーキテクチャ:
ARM
コンポーネント:
compiler
更新日:
2017/12/27 6:23
はじめに
このテクニカルノートは、GCCインラインアセンブラからARM用IAR Embedded Workbenchへの移行について説明しています。 このテクニカルノートはARM7 / 9デバイスに適用され、Cortexデバイスには適用されません。
謝辞
これらのサンプルは、ヨーロッパのスロバキア、ブラチスラヴァ、PasatのIvan Paulik氏が作成したものです。 ARM用IAR Embedded Workbenchユーザに公開していただき感謝します。
背景
従来より「GCCからEWARMへの移行ガイド」のリクエストがあります。 これは簡単な作業 (IARが他の移行ガイドを書いているように)のように見えますがすべてのGCCバージョンをカバーすることは困難です。
提案
ARM用の GCC と Embedded Workbench で一番異なる領域であるインラインアセンブラとその構文 (および他の問題) について、このテクニカルノート (および添付のドキュメント)でコメントします。 このテクニカルノートのゴールは、9つのサンプルプロジェクトとコメントが、GCC と IAR Embedded Workbench の最も異なる問題をカバーし、他の問題を、マイグレーションを行う開発者が整理することができるようにすることです。
一般的なコメント
GCCコンパイラは、ユーザにより多くの責任を与えるように思われますが、ARM用のIAR Embedded Workbenchでは、キーワード、組み込み関数、および/またはオプションを使用してアプリケーション内の同じ構文をカバーします。
The examples
EXAMPLE 1 -- MCUの1つのレジスタを参照するコード
汎用レジスタを読んだり使用したりせずに、このような構文を書き直してください。例で説明するように、ICCARM は、R0レジスタを再使用し、ランタイムでのエラーが発生する大きな危険があります。
EXAMPLE 2 -- SWI 命令の使用
GCC 構文を IAR Systems C/C++ Compiler for ARM のキーワード __SWI で置き換えてください。
EXAMPLE 3 -- インラインアセンブラからの引数付き関数の呼び出し
コンパイルをより効率的にするために、インラインアセンブリの使用を最小限に抑える必要があるため、ICCARMでは使用しないでください。IAR は インラインアセンブラを、実際のアセンブラ関数としてアセンブラファイルに書き直すことを勧めています。
EXAMPLE 4 -- プロローグとエピローグ無い関数の使用
GCC 構文を維持することには、高い危険性があります。IAR は インラインアセンブラを、実際のアセンブラ関数としてアセンブラファイルに書き直すことを勧めています。
EXAMPLE 5 -- パックされたデータ構造体の使用
GCCからIAR Systems C/C++ Compiler for ARM への構文の変更を説明しています。
EXAMPLE 6 -- セグメントの開始、終了その他の参照
IAR Systems C/C++ Compiler for ARM のセクション演算子を使用して書き直してください。
EXAMPLE 7 -- 暗黙の引数/戻り値のハンドリングをせずに、独自の prolog と epilog を使用
GCC 構文を削除し、代わりに Interwork オプションを使用してください。
EXAMPLE 8 -- 割り込み関数の使用
GCCからIAR Systems C/C++ Compiler for ARM への構文の変更を説明しています。
EXAMPLE 9 -- データ構造をそろえる
GCCからIAR Systems C/C++ Compiler for ARM への構文の変更を説明しています。
注意:
このテクニカルノートでは、GCCからARM用IAR Embedded Workbenchの変換に関するすべての問題についてカバーしていませんが、少なくとも移行の出発点となります。
全ての製品名は、それぞれの所有者の商標または登録商標です