0

リアルタイム カーネルTNeoKernelを Cortex-M アーキテクチャに移植しているので、Keil をインストールしてカーネルをビルドしようとしています。ただし、予期しない問題に直面しています。コンパイラがinline関数を処理できないようです。簡単なコードは次のとおりです。

static inline int test(void)
{
   return 0;
}

コンパイラの出力は次のとおりです。

src\appl\main.c(17): warning:  #260-D: explicit type is missing ("int" assumed)
  static inline int test(void)
src\appl\main.c(17): error:  #65: expected a ";"
  static inline int test(void)

キーワードを削除するinlineと、コンパイルして動作します。

ARM Compiler のドキュメントでは、関数について何も見つかりませんinline。念のために言っておくと、inlineキーワードは ARM コンパイラでサポートされていないのでしょうか? あまりにも信じられないので、質問することにしました。

カーネルのプラットフォームに依存しないコードに多くのstatic inline関数があるので、ARM コンパイラをサポートする最善の方法は何ですか? 頭のてっぺんから、2つのアイデアしかありません。

  • のようなアーキテクチャ依存のマクロを作成TN_INLINEし、ARM コンパイラの場合は何も展開しないようにする必要があります。
  • 非常に小さな 1 行の関数をマクロに変換します。
4

1 に答える 1

5

inlineキーワードは c99 で導入されましたが、デフォルトではKeil ARM C コンパイラは c89/c90 モードでコンパイルします。

Keilのドキュメントinlineでは、c90 では利用できないと明示的に述べています。

inline キーワードは C90 では使用できません。

Keil ARM C コンパイラは、c99 もサポートしています。--c99コンパイラ オプションを使用して c99 モードに切り替えるか__inline、c90 モードで拡張キーワードを使用してみてください。

于 2014-11-13T01:26:25.687 に答える