16

私は組み込みデバイスを扱っていますが、もともと IAR コンパイラを使用してコンパイルされたコードがいくつかあります。

GCCコンパイラを使用して上記のコードを再コンパイルしようとしています。

特定のステートメントがあります: typedef __IO、単にコンパイルされません (「認識されないシンボル エラー」)。

このステートメントを適切にコンパイルする方法を誰かが提案できますか?

4

3 に答える 3

14

認識されない場合は、定義を含む適切なシステム ヘッダーが含まれていないことが原因です。

これは、ツールチェーンで提供されるチップ サポート ヘッダー ファイルで定義されます。型修飾子、または型修飾子に展開されるマクロ ( )#defineです。たとえば、次のように使用されます。

__IO uint8_t CSSR;

ここuint8_tに型があるので、__IO はtypedef型が有効な場所では使用されないため、実際には a になることはできません。__IO マクロは、正しい I/O アクセスとアドレス指定を保証するために特定のコンパイラが必要とするものに展開されます。I/O がメモリ マップされている典型的なケースでは、volatile明示的なアクセスが最適化されないようにすべての I/O を volatile と宣言する必要があるため、単純に展開されます。

確認したい場合は、IAR ツールのデモ バージョンをダウンロードし、特定のアーキテクチャに対してどのように定義されているかをヘッダー ファイルで確認してください。そうでなければ、あなたはただ使うかもしれません#define __IO volatile

于 2013-01-16T22:42:38.147 に答える
8

_IO は C 言語のように揮発性を意味します...これはコードを最適化せず、_IO を使用して変数に指定された値は予測できないか、コンパイラとユーザーの知識なしに変更されます

于 2014-05-06T09:13:29.637 に答える