2018年8月5日日曜日

PIC XC8 v2.0 Build Error (Timer Interrupt )

 最新の MPLAB IDE v5.00 で、初めてPICのプログラミングをしているのだが、Timer Interrupt のところで6時間位立ち往生してしまった。

interrupt_manager.h や interrupt_manager.c に下記の記述をしているのだが、

    void interrupt INTERRUPT_InterruptManager (void);

Buildしようとすると、下記のようなErrorが出てビルドできない。

    In file included from mcc_generated_files/interrupt_manager.c:49:
    mcc_generated_files/interrupt_manager.h:111:6: error: variable has incomplete type 'void'
    void interrupt INTERRUPT_InterruptManager (void);
         ^
    mcc_generated_files/interrupt_manager.h:111:15: error: expected ';' after top level declarator
    void interrupt INTERRUPT_InterruptManager (void);

・戻り値のvoidは incomplete type(不完全な型)だからだめ
・最上位の宣言文のあとは ";"が付くべき
と言っているようだ。本当なのか?
 昔はZ80や8086のアセンブラを結構やっていて、また、VBやC#はそこそこ使えている自分だが、Cはなぜか今回が初めて。ああ、自分はこんな程度のことが判らないのか、それともXC8の方言なのかと、英文のマニュアルを調べたりした。最新版のマニュアルなのに どうも interrupt の説明が古い感じ。どうしても納得できなくて、いろいろとGoogle検索もしてみたが、なかなか有効な情報が無い。最終的に、どうも interrupt というキーワードに関して、XC8 Compiler v2.0 にBugがありそうだという感触になった。そして、英語のサイトを検索していてようやくそれらしい情報を見つけた。
 結論としては、XC8 Compiler の Project Properties のなかで、C Standard という設定項目があって、そこを C99 -> C90 に変更すればよい、という情報を見つけ、それを試したところ、No error で Build 出来た。
これで解決。無事、Timer Interrupt で LEDの1secのblink(点滅)が出来た。たったこれだけのことをやるだけなのに、解決までが長かったなー。