固定メモリアドレスに関数ポインタの配列を宣言し、それを別の.cファイルで使用する必要がある埋め込みアプリケーションで作業しています。私が思いついたのは次のとおりです。固定メモリアドレスのCの関数ポインタのExtern配列
typedef void(__irq __arm * p_intr_handler_t)(void);
p_intr_handler_t * IntTable = (p_intr_handler_t *)&VIM_RAM_BASE;
p_intr_handler_t IntTable[95];
VIM_RAM_BASEはアドレスです。私はmain.fファイルでこれをdelcare、私は様々な.cファイルでそれを使用する必要があるので、私はこのようにそれを宣言した:
extern p_intr_handler_t IntTable[95];
しかし、私はエラーメッセージが表示されますコンパイルしようとしながら: 「宣言は互換性がありません"p_intr_handler_t * IntTable"(3行目で宣言されています) " そのメッセージは通常宣言と外部宣言の両方に送られます。
何か問題がありますか?
おかげ
あなたは正しいです、私は実際にそれを2度宣言しました。どういうわけか私は、サイズが96であることを暗示する必要があるように感じました...とにかく、私はあなたが言ったことをやったので、このメッセージには、この式が一定値を持たなければならない 'p_intr_hadler_t * IntTable =(p_intr_hadler_t *)&VIM_RAM_BASE;と 'extern p_intr_hadler_t * IntTable;'は定義されていません...私は.hの権利をリンクしています。 – user1267031
'VIM_RAM_BASE'はどのように定義されていますか?おそらく '&'は必要ないでしょう。また、 '.h'を"リンク "するのではなく、関連する' .c'ファイルに含める必要があります。 –
これは、 '__IO_REG32(VIM_RAM_BASE、0xFFF82000、__ READ_WRITE); 'のように定義され、IO_REG32は' #define __IO_REG32(NAME、ADDRESS、ATTRIBUTE)\ volatile __no_init ATTRIBUTE unsigned long NAME @ ADDRESS'のように定義されます。リンクすることによって、私は含むことを意味した。 extern式は、関連する.cファイルに含まれている.hファイルにありますが、エラーはexternが存在する.hに既にあります。 – user1267031