keil移植MQTT时GNU语法报错

keil移植MQTT时GNU语法报错

目录

  • keil移植MQTT时GNU语法报错
    • 一、原因分析
    • 二、解决方法
      • 方法1
      • 方法2

背景描述:

STM32F103C8T6+ESP8266 WIFI模块,使用CubeMX生成简单的FreeRTOS代码,调通UART1和UART3,UART3与WIFI模块连接,UART1作为调试串口。

基于源代码移植杰杰的kawaii MQTT,clientmqtt,遇到GNU语法报错:

…\mqttclient\mqttclient\mqttclient.h(79): error: #3093: anonymous structs are only supported in --gnu mode, or when enabled with #pragma anon_unions

在这里插入图片描述

一、原因分析

官方解释:

https://developer.arm.com/documentation/dui0375/latest/Language-Extensions/Anonymous-classes–structures-and-unions

此结构体中存在匿名结构体,keil默认的ARMCC编译工具链不支持匿名结构体,GNU编译工具链支持匿名结构体。

//此结构体中存在匿名结构体,ARMCC不支持,逐步分析:
def_class(mqtt_connack_data_t,private_member(uint8_t rc;uint8_t session_present;)
)//def_class宏定义如下:
#define def_class(__name, ...)          __def_class(__name, __VA_ARGS__)//private_member宏定义如下:
#   define private_member(__member)         __member//private_member宏定义如下:
#define private_member(...)              PLOOC_VISIBLE(__VA_ARGS__)      //使用增加错误语法编译,查看编译报错方法来看,PLOOC_VISIBLE走的是下面的分支,其中存在一个没有名字的结构体即匿名结构体,AMRCC报错
#   if defined(PLOOC_CFG_REMOVE_MEMORY_LAYOUT_BOUNDARY___USE_WITH_CAUTION___)
#       define PLOOC_VISIBLE(...)           __VA_ARGS__
#   else
#       define PLOOC_VISIBLE(...)                                               \struct  {                                                               \__VA_ARGS__                                                         \}PLOOC_ALIGN(PLOOC_ALIGNOF_STRUCT(__VA_ARGS__));
#   endif      

二、解决方法

方法1

在keil编译器中增加--gnu,解决编译报错问题

在这里插入图片描述

方法2

自己定义PLOOC_CFG_REMOVE_MEMORY_LAYOUT_BOUNDARY___USE_WITH_CAUTION___解决编译报错

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/326367.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FineBI:简介

1 介绍 FineBI 是帆软软件有限公司推出的一款商业智能(Business Intelligence)产品。 FineBI 是定位于自助大数据分析的 BI 工具,能够帮助企业的业务人员和数据分析师,开展以问题导向的探索式分析。 2 现阶段数据分析弊端 现阶…

PySimpleGUI图形界面实例|PDF表格转换Excel文件

实例要求: 使用PySimpleGUI做一个把单位考勤系统导出的pdf文件合并输出Excel的应用,故事出自:https://hannyang.blog.csdn.net/article/details/135395946 当时时间紧,没有好好做界面且输出csv文件了事。今天趁周六休息&#xf…

初中数学:几何题的相关解题原则总结

一、多问类型的几何题 我们做题,应该都遇到过这类几何题目,就是,三个小问,每个小问对应一个几何图像,而且,渐渐复杂。这种题目,大多数有一个变化的条件,比如,动点、角度…

从零开始:教你如何规划和开发一款优质的教育网校APP

本篇文章,笔者将从规划和开发的角度,详细介绍如何从零开始打造一款优质的教育网校APP。 第一步:明确需求和目标 在开始规划之前,我们首先需要明确教育网校APP的目标受众是谁,提供哪些课程,以及期望达到的…

基于SpringBoot+Vue人力资源管理系统(前后端分离)

该项目完全免费 系统介绍 基于 SpringBootVue 实现的人力资源管理系统是为了提高企业人力资源管理水平而开发的。主要目标是通过对员工 及人力资源活动信息(考勤、工资 ) 等的编制来提高企业效率。 系统一共分为五大菜单项,分别是首页、薪资管理、权…

【总线接口】1.以Xilinx开发板为例,直观的认识硬件板卡和接口

初接触硬件,五花八门的总线、接口一定会让你有些疑惑,我尝试用一系列文章来解开你的疑惑 系列文章 【总线接口】1.以Xilinx开发板为例,直观的认识硬件接口 【总线接口】2.学习硬件这些年接触过的硬件接口、总线 大汇总 【总线接口】…

Qt/QML编程学习之心得:QSocketNotifier(二十一)

QSocketNotifier在Qt中怎么使用? QSocketNotifier使Qt的事件循环与其他基于文件描述符的事件循环集成成为可能。在Qt的主事件循环(QCoreApplication::exec())中检测到文件描述符操作。 使用低级(通常是特定于平台的)API打开设备后,可以创建一个套接字通知程序来监视文…

【自学笔记】01Java基础-09Java关键字详解

介绍java(基于java11)中所有关键字,以及主要重要的关键字详解。 1 Java 11中的关键字: 1.1 类型声明与变量定义 boolean:声明布尔类型变量,只有两个可能值 true 或 false。byte:声明一个8位有…

软件测试|SQL中的null值,该如何理解?

深入理解SQL中的Null值:处理缺失数据的重要概念 简介 Null值在SQL中是用于表示缺失或未知数据的特殊值。本文将深入探讨Null值的概念、处理方法和注意事项,以帮助读者更好地理解和处理SQL中的缺失数据。 在SQL数据库中,Null值是一种特殊的…

第九节HarmonyOS 常用基础组件10-TextClock

1、描述 TextClock组件通过文本将当前系统时间显示在设备上。支持不同时区的时间显示,最高精度到秒级。 2、接口 TextClock(options?: {timeZoneOffset?: number, controller?: TextClockController}) 3、参数 参数名称 参数类型 必填 描述 timeZoneOffs…

同步检查继电器 DT-1/200 100V 板后接线 面板安装 JOSEF约瑟

系列型号 DT-1/200同步检查继电器; DT-1/160同步检查继电器; DT-1/130同步检查继电器; DT-1/120同步检查继电器; DT-1/90同步检查继电器; DT-1/254同步检查继电器; 一、用途 DT-1型同步检查继电器用于两端供电线路的自动重合闸线路中,其作用在于检查线路上电压的存…

【数据分享】2023年我国土壤数据集HWSD2.0(免费获取/7个土壤深度/40多种土壤指标)

土壤数据,包括土壤类型、土壤酸碱度、土壤沙含量等指标,对于农业、林业、园艺、环境保护等领域都非常重要。 本次我们为大家带来的是2023年1月份发布的我国土壤数据库,包括国界范围的数据和分省份的数据。该数据的核心信息如下: …