You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C编译报错#5无法打开DC_MOTOR.h、#513指针类型不匹配问题咨询

编译报错原因及解决办法

第一类报错:无法打开DC_MOTOR.h头文件

报错原文:

../Core/Src/main.c(25): error: #5: 无法打开源输入文件 "DC_MOTOR.h": 没有该文件或目录。

报错原因

  • DC_MOTOR.h文件不存在于项目中,可能是被误删、移动位置,或者include语句中的文件名拼写、大小写和实际文件不符
  • 头文件所在目录未添加到编译器的头文件搜索路径中,编译器无法定位到文件位置

解决建议

  • 首先核对项目目录中是否存在DC_MOTOR.h,确认include语句中的文件名和实际文件名完全一致
  • 若文件存在,在IDE的编译器配置中添加该头文件所在目录到头文件搜索路径:Keil可在C/C选项卡的Include Paths中添加,STM32CubeIDE可在C/C General->Paths and Symbols->Includes中添加

第二类报错:指针类型不匹配

报错原文:

BUTTONS.c(57): error: #513: a value of type "uint8_t *" cannot be assigned to an entity of type "float *"
相关代码:

typedef struct
{
    uint16_t Filter_Order;
    uint16_t Buffer_Index;
    FILTER_DATA_TYPE* Data_Buffer;
    float* Filter_Coeffecients;
}FIR_Filter_cfg;

FIR_Filter_cfg BTNS_Filters[BTN_UNITS] = {0};
uint8_t Filters_Buffers[BTN_UNITS][BTNS_FILTER_ORDER+1] = {0};
BTNS_Filters[i].Data_Buffer = Filters_Buffers[i];

报错原因

结构体成员Data_Buffer的类型为FILTER_DATA_TYPE*,结合报错信息可知你项目中定义的FILTER_DATA_TYPE是float类型;而你定义的缓冲区Filters_Buffers是uint8_t类型数组,Filters_Buffers[i]得到的是uint8_t*类型指针,两种指针类型不兼容,因此编译器抛出类型不匹配错误。且uint8_t占用1字节,float占用4字节,即使强转也会导致后续数据读写时出现内存越界、解析错误的问题。

解决建议

  • 优先修改缓冲区类型和FILTER_DATA_TYPE保持一致,将uint8_t Filters_Buffers[BTN_UNITS][BTNS_FILTER_ORDER+1] = {0};修改为FILTER_DATA_TYPE Filters_Buffers[BTN_UNITS][BTNS_FILTER_ORDER+1] = {0};即可解决报错,同时避免内存访问异常
  • 若业务场景必须使用uint8_t类型存储缓冲区,赋值时需添加显式强制类型转换:BTNS_Filters[i].Data_Buffer = (FILTER_DATA_TYPE*)Filters_Buffers[i];,必须保证uint8_t缓冲区的总字节数≥ FILTER_DATA_TYPE大小 × 元素个数,避免内存越界

内容的提问来源于stack exchange,提问作者Mohamad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 00:06:03