リアルタイム カーネル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 行の関数をマクロに変換します。