1

arm-linux-gnueabi-gcc を使用してこの関数をコンパイルしていますが、エラーが発生します。 expected string literal before ‘)’ token

void flush_icache(void)
{
  u32 tmp = 0;
  asm volatile(" mcr p15, 0, %0, c7, c5, 0\n\t": : "r"(tmp) : );
}

削除できません。誰かが何か考えを持っているなら、親切に解決してください

4

2 に答える 2

1

たぶん「r」と「(tmp」)の間にスペースを入れますか?

GCCの「拡張ASMコマンド」に関するドキュメントは次のとおりです。

このリンクも役立つかもしれません:

=============補遺=============

もう1つの提案:

void flush_icache(void)
{
  u32 tmp = 0;
  asm volatile(
    " mcr p15, 0, %0, c7, c5, 0\n\t" 
    :             /* no output registers */
    : "r"(tmp)    /* input */
  );
}
于 2012-06-06T18:21:03.153 に答える
0

予想通り、crosstool-chain の使用に問題がありました。そのため、以前は codesourcery(2008) が提供する古いものを使用していましたが、2010 ツールチェーンに移行しました。
これは、ARM のアーキテクチャの変更に伴う問題である可能性があります。

于 2012-06-10T05:51:20.113 に答える