Embedded 头文件包含不包含';不能在MPLAB X IDE中工作

Embedded 头文件包含不包含';不能在MPLAB X IDE中工作,embedded,microchip,mplab,Embedded,Microchip,Mplab,这是我的主.c文件 #include "services_initialisations_prototype.h" #include "services_functions_prototype.h" void main(void) { initSfr(); while(1){ updateMatrix(404, 1); } return; } 这是我的服务\u初始化\u原型。h

这是我的主.c文件

#include "services_initialisations_prototype.h"
#include "services_functions_prototype.h"


void main(void)
    {
    initSfr();
    while(1){
        updateMatrix(404, 1);
        }
    return;
    }
这是我的服务\u初始化\u原型。h


#ifndef XC_HEADER_TEMPLATE_H
#define XC_HEADER_TEMPLATE_H

#include <xc.h> // include processor files - each processor file is guarded.  
#include <stdint.h>

//these are my function declarations
extern void initInterrupt();
extern void initIoc();
extern void initAdc();
extern void initTimer2();
extern void initSfr();


#ifdef  __cplusplus
extern "C" {
#endif /* __cplusplus */
#ifdef  __cplusplus
}
#endif /* __cplusplus */

#endif  /* XC_HEADER_TEMPLATE_H */
#ifndef XC_HEADER_TEMPLATE_H
#define XC_HEADER_TEMPLATE_H

#include <xc.h> // include processor files - each processor file is guarded.  
#include <stdint.h>

//these are my function declarations
extern void updateMatrix(int, int);

#ifdef  __cplusplus
extern "C" {
#endif /* __cplusplus */
#ifdef  __cplusplus
}
#endif /* __cplusplus */

#endif  /* XC_HEADER_TEMPLATE_H */

#ifndef XC\u标题\u模板\u H
#定义XC\u头\u模板\u H
#include//include processor files-每个处理器文件都受保护。
#包括
//这些是我的函数声明
外部无效初始化中断();
外部无效初始化();
外部无效initAdc();
外部无效initTimer2();
extern void initSfr();
#ifdef_uucplusplus
外部“C”{
#endif/*\uuu cplusplus*/
#ifdef_uucplusplus
}
#endif/*\uuu cplusplus*/
#endif/*XC\u头\u模板\u H*/
这是我的服务功能原型


#ifndef XC_HEADER_TEMPLATE_H
#define XC_HEADER_TEMPLATE_H

#include <xc.h> // include processor files - each processor file is guarded.  
#include <stdint.h>

//these are my function declarations
extern void initInterrupt();
extern void initIoc();
extern void initAdc();
extern void initTimer2();
extern void initSfr();


#ifdef  __cplusplus
extern "C" {
#endif /* __cplusplus */
#ifdef  __cplusplus
}
#endif /* __cplusplus */

#endif  /* XC_HEADER_TEMPLATE_H */
#ifndef XC_HEADER_TEMPLATE_H
#define XC_HEADER_TEMPLATE_H

#include <xc.h> // include processor files - each processor file is guarded.  
#include <stdint.h>

//these are my function declarations
extern void updateMatrix(int, int);

#ifdef  __cplusplus
extern "C" {
#endif /* __cplusplus */
#ifdef  __cplusplus
}
#endif /* __cplusplus */

#endif  /* XC_HEADER_TEMPLATE_H */
\ifndef XC\u头\u模板\u H
#定义XC\u头\u模板\u H
#include//include processor files-每个处理器文件都受保护。
#包括
//这些是我的函数声明
外部无效更新矩阵(int,int);
#ifdef_uucplusplus
外部“C”{
#endif/*\uuu cplusplus*/
#ifdef_uucplusplus
}
#endif/*\uuu cplusplus*/
#endif/*XC\u头\u模板\u H*/
当我试图在MPLAB X IDE版本4.05中包含两个头文件时,它似乎没有识别第二个头文件。我尝试交换订单,但仍然没有检测到第二个订单

服务\初始化\原型。h包含SFR和服务\函数\原型的初始化。h包含其他函数的原型。这些功能相互独立

当我编译时,它显示

函数updateMatrix()声明为隐式int。 变量_updateMatrix()的声明冲突

这表明未识别头文件服务函数原型

所附的屏幕截图以灰色显示了services_functions_prototype.h中的代码,部分代码似乎没有执行


当我将整个声明从头文件复制到主文件时,它工作得非常好。

您在两个文件中使用了相同的include-guard。因为一个文件包含在另一个文件之前,所以它定义了
XC\u HEADER\u TEMPLATE\u H
,这使得
\ifndef
在第二个文件中失败。把它们换成独一无二的东西

请记住,带有两个前导下划线的标识符或带有一个前导下划线和一个大写字母的标识符由C标准保留。好的在线文档已经准备好了

使用带有大写字母的文件名,如
服务\u函数\u原型\u H
服务\u初始化\u原型\u H

注:

  • 函数声明中的空参数列表声明接受未知计数和参数类型的函数。更喜欢在函数参数列表中显式写入
    void
    ,以定义不带参数的函数,从而启用编译器静态检查。即do
    void initInterrupt(void)
    
  • 在文件范围中声明的标识符隐式地与外部链接一起使用。例如,
    extern
    只是多余的,只是
    void initSfr(void)而不是
    extern void initSfr()
  • extern“C”{
    部分在您的标题中没有任何意义-它里面没有任何内容。这是放置
    extern“C”的典型调用{ //> >头文件顶部,包括内部所有内容。如果您的头将由C++编译器使用,函数名称将被损坏,并且没有正确解决。我相信我建议删除“<代码>外部”C”{<代码> >部分。

请不要发布错误消息图像的链接。请编辑您的帖子并将代码作为文本添加到帖子中。请发布一条。请将错误消息逐字逐句地作为文本添加到您的帖子中。请慢慢来,进行研究。我也重新推荐。什么是“不起作用”?什么是“不起作用”,以什么方式以及如何知道?您阅读了错误消息吗?您进行了哪些研究,结果如何?本着本论坛的精神,您有问题要问吗?您的问题是什么?您编译mcu的目的是什么?(而且你似乎正在使用免费版本的xc8编译器——我建议改为使用sdcc,免费xc8总是工作得很糟糕。如果你使用pic18*没有特殊原因,我建议把它们放进垃圾箱,改为使用stm32或nrf)@KamilCuk我已经编辑了代码。当我将整个声明作为extern复制到我的主文件时,它工作正常。另外,我是一名学生,使用免费的编译器就足够了。我使用的是pic16f1787。