正確には、MPLAB XC8 Compiler v2.00 で MPLAB Code Configurator v3.65 の吐いた割り込み処理のコードがコンパイル・エラーになる。
1 2 3 4 5 6 7 8 |
mcc_generated_files/interrupt_manager.h:109:6: error: variable has incomplete type 'void' void interrupt INTERRUPT_InterruptManager(void); ^ mcc_generated_files/interrupt_manager.h:109:15: error: expected ';' after top level declarator void interrupt INTERRUPT_InterruptManager(void); ^ ; 2 errors generated. |
以下で検索してみる。
1 |
XC8 error: variable has incomplete type 'void' |
こういうコードを
1 2 |
void interrupt my_isr_routine (void) { } |
こう直したらクリアできたよ。
1 2 |
void __interrupt () my_isr_routine (void) { } |
という書き込みと、
C99をC90にしたらいいよ。
という書き込みを見つけ、そのどちらでも問題なくコンパイルできた。
User Manual には以下のような記述がある。
要するに、IDEの初期設定ではC99でコンパイルするようになっているのに、MCCの吐くコードはC90に準拠しているということのようだ。
手動でC99に寄せるか、プロジェクトの設定でC90に変更するかのどちらかということになる。
そのうちMCCがC99に対応することになるんだろう。
PIC32ばかり使っていて、XC8を使ってなかったので遭遇しなかったが、いろいろ面倒ではある。
1999年なのでC99なのだそうだが、今2018年じゃんね。
またC18とかになって、何も知らない私のような素人が右往左往することになるんだろうか。
まあ、検索すればすぐ解決策は見つかるので、そうなったら考えりゃいいか。
Tommy on 2018年11月7日 at 12:11 AM said:
貴重な内容を残していただき、ありがとうございました。同じコードでXC Ver.2.0になってコンパイルできなかったのですが、記述が変わっていたんですね。大変参考になりました。