0

我最近在工作中接手了一些 C 和固件职责,并且在处理看似基本但找不到答案的问题时遇到了麻烦。我对 C 语言不是很有经验,但我在高级语言方面有多年的经验。

该固件是为 PIC18F4865 编写的,我无法正确编译和编程。它最初是使用 HI-TECH PICC18 编译器在 MPLAB IDE 8 上编写的,但我升级到 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,但这仍然是我想要修复的问题。

4

1 回答 1

2

一些头文件正在使用宏来#define eeprom_read插入其他内容,可能是空字符串。如果您使用不同的函数名称,#undef eeprom_read或执行其他操作以导致标头不再生成该宏,它应该可以工作。

于 2012-09-24T19:15:01.810 回答