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 出来た。
C99使えるのにわざわざC90に戻してビルドするとはね。(笑)
返信削除解決策はマニュアルに書いてある。
あなたは何でもバグにしてしまうのかい?
そういう風に言うなら具体的に教えりゃ良いだろ!
削除批判してても自分の自慢話にしか聞こえない!!
そう、マニュアルを見ても判らないから上記のようなことになったので、「xxというマニュアルのどこどこに書いてあるじゃん、そんなことも見つけられないのかい」みたいな、自慢話でもいいから教えてほしいんだよね。同じような問題にぶち当たった人たちで情報共有出来たらと思って投稿したので。
削除書き方が変わったみたいで、以下でビルド可能でした。
返信削除void __interrupt () my_isr_routine (void)
この情報によりmake errorが消えました。xc8 v2.05です。
返信削除ありがとうございます。
このブログが役に立ったみたいで、よかったです。
削除ここをヒントに助かりました当分C90の方でやりそうです。
返信削除ありがとうございました。
もうAVRに移ってPICは久しくやってなかったのですが、
返信削除昔作ったの流用したら簡単に作れるものが出てきて、使ってないPIC ICの処分がてら
MPLABとXC8をインストール、過去のプログラムをコンパイルしたら同じエラーになりました。
匿名さんのvoid __interrupt () my_isr_routine (void) の書き方で通りました。
提起してくださったスレ主様、情報をくださった匿名さん、感謝です。
ビルドできずに困っていたのが解決しました。ありがとうございます!
返信削除助かりました。C90に変更するとビルドできました。
返信削除私も同じ点でぶつかり、このページの情報で解決しました。どうもありがとうございました。
返信削除「マニュアルに載っている」という事だったので探してみましたところ、以下のところにそれらしい記述を見つけました。
コンパイラのマニュアルは全編英語で量も多いので、思わず読まずに済ませたくなっちゃいますよね。私も今回の件で初めて開きましたので。
マニュアルのタイトル:MPLAB® XC8 C Compiler User’s Guide for PIC
該当の章:5.8.1 Writing an Interrupt Service Routine
マニュアルのファイルがあるパス:C:\Program Files\Microchip\xc8\v2.30\docs
助けになります。ビルドできました。
返信削除マニュアルにもありましたね。。
本当にありがとうございます。
助かったぜ。ありがとうございます。
返信削除