c - MPLAB X 中的有效代码和编译器错误

标签 c c99 xc8

我有主文件:

#include "modbus.h"

void main(void)
{
    modbus_frame_t frame;
    // (...)   

    // ERROR ON LINE BELOW
    // main.c:59:: error: (712) can't generate code for this expression
    crc16(frame, 1); 
}

这是“modbus.h”文件:

#ifndef MODBUS_H
#define MODBUS_H

#define MODBUS_FRAME_BUFFER_SIZE 74

struct modbus_frame {
    unsigned char * data[MODBUS_FRAME_BUFFER_SIZE];
    unsigned char * len; 
};

typedef struct modbus_frame modbus_frame_t;

char crc16(modbus_frame_t f, char check);

#endif

这是“modbus.c”文件:

#include "modbus.h"

char crc16(modbus_frame_t f, char check) {
    // (...)
}

MPLAB XC8 2.05 编译器说:

main.c:59::error: (712) 无法为此表达式生成代码

当我将结构更改为:

struct modbus_frame {
    unsigned char data[MODBUS_FRAME_BUFFER_SIZE];
    unsigned char len; 
};

它抛出没有意义的不同错误( undefined symbol _crc16())。

我的代码有什么问题?

最佳答案

我找到了。

文件“modbus.h”和“modbus.c”已添加到"file"工具窗口中,如下所示:

enter image description here

但它们在项目结构中缺失:

enter image description here

并且 MPLAB 没有在ma​​ke 命令参数中考虑这些文件。

没想到是这样

在我在项目结构中添加“modbus.h”和“modbus.c”(添加现有文件)后 - 事件按预期工作。

关于c - MPLAB X 中的有效代码和编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54696088/

相关文章:

c - 如何使用PIC18f87k22定时器作为中断

c++ - 尝试使用XOR和移位运算符切换随机LED

c++ - 多部分基准的权重是多少?

c - 如何比较两个复数?

c++ - C/C99/C++/C++x/GNU C/GNU C99 中枚举的签名

c - VS2013对C99支持的官方状态是什么?

C函数,反转字符串

c - typedef 函数指针 -> 从不兼容的指针类型初始化

c - '\0' 保证为 0 吗?

c - 有符号除数的 % 运算符在 C 中需要更多的程序内存