2

私は IAR Embedded Workbench for ARM (ARM7TDMI-S) を使用しており、私の作業の大部分はリトルエンディアン形式を使用して行われています。ただし、次のようなことができることをマニュアルで見ました:

__big_endian int i, j;

これらの 2 つの変数をビッグ エンディアンとして宣言します (アプリの残りの部分はリトル エンディアンとして宣言します)。これは素晴らしい機能のように思えますが、コンパイルしようとすると、常にエラーが発生します。

Error[Pa002]: the type attribute "__big_endian" is not allowed on this declaration.

上記のビッグ エンディアンの行は、マニュアルから直接コピーしたものですが、機能しません。これはコンパイラの優れた機能であり、作業が大幅に楽になります。それを機能させる方法はありますか?

IDE オプションの [C/C++ コンパイラ オプション] タブで、言語適合性を [IAR 拡張を許可する] に設定しています。

4

2 に答える 2

5

IAR のドキュメントから:

この__big_endianキーワードは、ARMv6 以降用にコンパイルするときに使用できます。

ARMv6 ではSETEND、状態ビットを操作して、ロード/ストア操作の実行時にプロセッサが使用するエンディアンを設定する命令が追加されました。IARの__big_endian組み込みは、その属性でタグ付けされた変数にアクセスするときに、プロセッサにそのビットを操作させるだけのようです。

ARM7TDMI は ARMv4 (またはおそらく ARMv5) アーキテクチャ デバイスです (私の記憶が正しければ)。

于 2010-06-01T16:04:22.753 に答える
1

これは IAR コンパイラの拡張機能であるため、コマンド ラインの -e オプションを使用するか、IDE のコンパイラ オプション ページで IAR 拡張機能を有効にすることによって有効にする必要があります。このキーワードは、 --strict_ansi コンパイラ オプションと互換性がありません。

于 2010-06-01T08:02:15.033 に答える