yuzhi13144 2024-04-02 00:20 采纳率: 0%
浏览 78
已结题

keilmdk编译无错误代码报错

img


keilmdk编译多个代码时都出现了 报这两个错 还有缺少分号报错 的情况 但是代码本身没有问题 想知道是编译器哪里设置有问题

  • 写回答

10条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-02 08:36
    关注

    引自免费微信小程序:皆我百晓生

    在Keil MDK环境下编译STM32项目时遇到的错误提示主要包括类型声明不兼容以及缺少存储类或类型说明符的问题。对于您提供的错误信息:

    1. 错误:#77-D: this declaration has no storage class or type specifier 这个错误通常意味着某个函数或变量的声明缺失必要的类型或存储类型(如staticextern等)。例如,您的函数MidFun在声明时可能遗漏了返回类型或函数参数类型。确保函数定义或声明遵循C语言的标准格式,如:

      unsigned char MidFun(int param1, char param2); // 假设函数原型,根据实际参数调整
      
    2. Error[Pe147]: declaration is incompatible with "interwork softfp" 这个错误表明编译器检测到了与指定的调用约定(interwork和softfp)不兼容的函数声明或定义。针对ARM Cortex-M处理器,通常在项目设置或函数声明中指定正确的ABI(应用二进制接口),例如采用__attribute__((pcs("aapcs-vfp")))。检查并确保所有函数声明和定义符合所选的ABI。

    3. 缺少分号报错 缺少分号的错误通常是语法错误,确保每个语句末尾都有分号。例如:

      int variable; // 正确的声明,末尾有分号
      int variable // 错误的声明,缺少分号
      

    要解决上述问题,请按照以下步骤排查:

    • 检查代码:仔细检查出错行及其上下文,尤其是MidFun函数的声明和定义部分,确认是否完整且正确。
    • 项目配置:查看项目的编译选项(Project -> Options for Target 'TargetName' -> C/C++ -> Compiler),确保ABI设置与您的代码相匹配,并未启用不适用的选项。
    • 预处理:可以尝试开启预处理输出(Output -> Listing -> Preprocessor Listing),查看预处理后的代码,有助于定位原始源代码中的问题。

    如果问题依然存在,请提供更多关于MidFun函数的详细声明和定义信息,以便进一步分析。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月2日
  • 修改了问题 4月2日
  • 创建了问题 4月2日

悬赏问题

  • ¥20 类原生rom lineageos
  • ¥15 有没有会做中专,云计算,卷子的,有偿一百块
  • ¥15 HC32串口DMA循环发送数据
  • ¥15 Uni-App实现飞书授权登陆
  • ¥50 Qt应用中如何通过代码打开开发者工具devtools
  • ¥20 mpp硬解码h264转为yuv
  • ¥40 怎样批量对比两个数据库的表差异
  • ¥60 具体分析这篇MVC结构springboot框架的安利代码
  • ¥15 lettuce连接哨兵redis,主从切换异常
  • ¥15 ubuntu出现以下问题