私は最近、仕事でいくつかのCとファームウェアの責任を引き継ぎました。基本的な問題のように見えますが、答えが見つからない問題に問題があります。私はCの経験はあまりありませんが、高級言語で長年の経験があります。
ファームウェアはPIC18F4865用に作成されており、正しくコンパイルおよびプログラムできません。もともとはHI-TECHPICC18コンパイラを使用してMPLABIDE8で作成されていましたが、MPLAB X IDEに移行して、問題が発生しました。
まず、同じHI-TECH PICC18コンパイラを使用していて、正常にプログラムされているように見えましたが、デバイスが正しく読み取れていませんでした。次に、XC8コンパイラに切り替えて、コンパイル中に回避できないエラーメッセージが表示されるようになりました。
C:/_Sable/Firmware_C/lib\eeprom.h:10: error: no identifier in declaration
C:/_Sable/Firmware_C/lib\eeprom.h:10: error: ";" expected
eeprom.hファイルは
#ifndef _EEPROM_H_
#define _EEPROM_H_
#define EE_ADDR(member) (offsetof(struct ee_map_s, (member)))
extern unsigned char eeprom_read(unsigned int); // this is line 10
extern void eeprom_write(unsigned int, unsigned char);
extern void ee_read(unsigned char, void *vp, unsigned char);
extern void ee_write(unsigned char, void *vp, unsigned char);
#endif
オンラインで調べたところ、このエラーは以前に含まれていたファイルで発生する可能性があることがわかりました。そのファイルを確認したところ、すべて問題ないようでした。インクルードの順序を並べ替えても、その場合はエラーメッセージが変わると思いますが、それでもこの行についてエラーが表示されます。
次に、どのパラメーターにも名前が付けられていないため、関数宣言が無効である可能性があると考えたため、10行目を次のように変更しました。
extern unsigned char eeprom_read(unsigned int addr)
これは何も変わりませんでした。しかし、私が掃除して再構築したとき、それはeeprom.hを再コンパイルしていなかったという奇妙な感覚がありました。それが発生するかどうか、または強制的に再コンパイルする方法はわかりません。
これを修正することで、現在発生しているファームウェアの問題が修正されるのか、MPLAB IDE 8に戻る必要があるのかはわかりませんが、それでも修正したいと思います。