lwip通过结构体解析数据,通讯原始数据与结构体

涉及数据格式

下面一段代码在ip4.h

PACK_STRUCT_BEGIN
/* The IPv4 header */
struct ip_hdr {/* version / header length */PACK_STRUCT_FLD_8(u8_t _v_hl);/* type of service */PACK_STRUCT_FLD_8(u8_t _tos);/* total length */PACK_STRUCT_FIELD(u16_t _len);/* identification */PACK_STRUCT_FIELD(u16_t _id);/* fragment offset field */PACK_STRUCT_FIELD(u16_t _offset);
#define IP_RF 0x8000U        /* reserved fragment flag */
#define IP_DF 0x4000U        /* don't fragment flag */
#define IP_MF 0x2000U        /* more fragments flag */
#define IP_OFFMASK 0x1fffU   /* mask for fragmenting bits *//* time to live */PACK_STRUCT_FLD_8(u8_t _ttl);/* protocol*/PACK_STRUCT_FLD_8(u8_t _proto);/* checksum */PACK_STRUCT_FIELD(u16_t _chksum);/* source and destination IP addresses */PACK_STRUCT_FLD_S(ip4_addr_p_t src);PACK_STRUCT_FLD_S(ip4_addr_p_t dest);
} PACK_STRUCT_STRUCT;
PACK_STRUCT_ENDstruct udp_hdr {PACK_STRUCT_FIELD(u16_t src);PACK_STRUCT_FIELD(u16_t dest);  /* src/dest UDP ports */PACK_STRUCT_FIELD(u16_t len);PACK_STRUCT_FIELD(u16_t chksum);
} PACK_STRUCT_STRUCT;//用到的定义
#define PACK_STRUCT_FLD_8(x) PACK_STRUCT_FIELD(x)
#define PACK_STRUCT_FIELD(x) x
//与udp数据对接
udphdr = (struct udp_hdr *)p->payload;
err_t
ip4_input(struct pbuf *p, struct netif *inp)
{struct ip_hdr *iphdr;/* identify the IP header */iphdr = (struct ip_hdr *)p->payload;...

PACK_STRUCT_STRUCT attribute ((packed))

串口数据传输数据时,共用体和结构体如何转换
实际使用时,会出现问题,可以参考LWIP修改

struct data_m
{char add;short code;char end;
};int main()
{struct data_m *st;st = data;printf("add:%x,code:%x,end:%x",st->add,st->code,st->end);return 0;
}

由于字节对齐,实际结果会是这样:add:12,code:7856,end:2

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

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

相关文章

el-table @row-click影响复制以及el-table-column的点击事件

问题一影响复制 在row-click的函数里面加一个内容判断 if (window.getSelection().toString() ) 只有当选中的内容为空的时候才执行row-click 问题二影响el-table-column的点击事件 el-table-column的点击事件上的点击事件加上.stop click.stop修饰符可以阻止事件继续向上传…

调试以及发布npm组件

开发原因: 由于公司自己的封装到npm的组件有点问题,负责人由在忙其他,就由我去负责改改,中途出了不少问题,记录一下。 一、下载源码 第一步肯定是去git上把组件的源码下载下来,这一步没什么好说&#xf…

好的问卷设计标准:确保数据质量与准确性的关键要素

问卷的主要由三个部分组成:问卷说明、问卷主题、问卷结束。而这三个部分又包含了很多因素,比如问卷主题、问卷标题、问卷题目、问卷调查对象等。制作问卷不仅仅是简单的问题罗列,然后进行发放。不同质量的调查问卷会反馈出不一样的效果&#…

Vue.js设计与实现(霍春阳)

Vue.js设计与实现 (霍春阳) 电子版获取链接:Vue.js设计与实现(霍春阳) 编辑推荐 适读人群 :1.对Vue.js 2/3具有上手经验,且希望进一步理解Vue.js框架设计原理的开发人员; 2.没有使用过Vue.js,但对Vue.js框架设计感兴趣…

2024年美赛E题:财产保险的可持续性 Sustainability of Property Insurance 思路模型代码解析

2024年美赛E题:财产保险的可持续性 Sustainability of Property Insurance 思路模型代码解析 【点击最下方群名片,加入群聊,获取更多思路与代码哦~】 问题翻译 极端天气事件对房产所有者和保险公司已经成为一场危机。近年来,世界…

RabbitMQ-中死信交换机

在RabbitMQ中,死信交换机(DLX,Dead Letter Exchange)是一种用于处理无法正常消费的消息的机制。当消息在一个队列中变成死信(dead letter)之后,它可以被重新发布到另一个交换机,这个…

Blender教程(基础)-面的切割-10

快捷键K切割,菜单选项切割. 一、随意切割 物体在编辑模式下,按键盘K建切割物体。 二、中点切割 先按K键,再按shift键,会自动吸附到每条边的中点进行切割。 三、取消吸附 切割时会自动吸附到顶点或边 关闭快速吸附 按K键再按…

26条prompt规则应用于大模型

1、引入动机 llm大模型在回答一些问题上表现出了惊人的能力,例如数学逻辑推理,代码生成,问题答复等。提词工程是和大预言模型交流的一门艺术。 大模型的返回结合和用户的指令和输入直接相关prompts是用户和大模型沟通的一种编码方式 一般地…

在低代码平台上实现精益软件开发:提高效率与灵活性的关键实践

什么是精益软件开发? 精益软件开发是一种敏捷的软件开发框架。它基于最小化浪费和最大化价值的原则。该框架基于最小可行产品策略运行,该策略强调交付具有基本基本功能的产品,然后根据收到的反馈进行迭代以即兴发挥并提供卓越。 精益软件开发…

2阶段提交_3阶段提交(phase-commit)

1. 2PC(两阶段提交) 如上所示是2阶段提交的一个过程,可为什么要进行两阶段提交呢?这里主要来说是将操作事务能力和提交、回滚事务能力分开来做成2阶段,如果不分开会造成什么后果呢: 如果单纯 A 向 B 发送一个请求就以…

由于找不到d3dcompiler43.dll无法继续执行程序的解决方法

在日常使用电脑的过程中,我们常常会遭遇一些突发的技术问题,其中之一便是可能会遇到系统提示找不到d3dcompiler43.dll文件的情况。这一特定的动态链接库文件(dll)对于许多应用程序的正常运行至关重要,尤其是在涉及到图…

什么是Golang中的包循环问题?如何规避?

Go语言作为一门注重简洁和效率的编程语言,在设计上有着严格的规范和原则。其中一个突出的设计决策是禁止包循环。接下来将深入解释为何Go语言中不允许包循环,如何避免它,以及如何进行好的规划,通过实际开发案例和代码演示&#xf…

PPT母版页码设置

PPT母版页码设置 一、需求介绍二、达到效果三、具体操作1. 插入页码2. 设置起始页码为03. 进入母版编辑页面4. 内容格式调整5. 删去最后一个板式的三个模块信息6. 尾页处理7. 最终效果 一、需求介绍 PPT的母版可以设定PPT的基调,且在非母版页面不会误改PPT中的固定…

数据库管理-第143期 Oracle DB 19c需要调整的基本参数V2(20240202)

数据库管理143期 2024-02-08 数据库管理-第143期 Oracle DB 19c需要调整的基本参数V2(20240202)1 DRM2 readmostly objects3 内存大页4 CLUSTER_INTERCONNECTS5 db_files6 内存配置7 555.1总结 数据库管理-第143期 Oracle DB 19c需要调整的基本参数V2&am…

【笔记】Android 常用编译模块和输出产物路径

模块&产物路径 具体编译到软件的路径要看编译规则的分区,代码中模块编译输出的产物基本对应。 Android 代码模块 编译产物路径设备adb路径Comment 模块device/mediatek/system/common/ 资源overlay/telephony/frameworks/base/core 文件举例res/res/values-m…

大专考试,搜题最准的软件?搜题神器推荐,助力大学生学业! #其他#知识分享

下面,我将为您介绍几款备受大学生欢迎的搜题软件,希望能够帮助您更好地完成学业和提升学习效果。 1.Quizlet Quizlet是一款学习卡片和题库应用,可用于各种学科的学习和复习。通过Quizlet,学生可以创建自己的学习卡片&#xff0c…

Leetcode的AC指南 —— 栈与队列 :150. 逆波兰表达式求值

摘要: **Leetcode的AC指南 —— 栈与队列 :150. 逆波兰表达式求值 **。题目介绍:给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 文章目录 一、题目…

GED(Generalized Error Distribution)广义误差分布

介绍 广义误差分布(GED)是指一类以整个实数轴为支撑集的连续分布,是由Box和Tiao在1973年提出的(他们称该分布为the exponential power distribution), Harvey在1981年又提出了该分布并命名为GED. 该分布包含三个参数 μ ∈ R , a > 0 , b > 0 \m…

Redis核心技术与实战【学习笔记】 - 17.Redis 缓存异常:缓存雪崩、击穿、穿透

概述 Redis 的缓存异常问题,除了数据不一致问题外,还会面临其他三个问题,分别是缓存雪崩、缓存击穿、缓存穿透。这三个问题,一旦发生,会导致大量的请求积压到数据库。若并发量很大,就会导致数据库宕机或故…

TQ15EG开发板教程:开发板Vivado硬件设置

1,串口的配置 PS端有2个串口,在BANK500, 1.8V IO电平 管脚名称 电平 说明 UART0 RX MIO18 1.8V MPSOC方向看 TX MIO19 1.8V UART1 RX MIO21 1.8V TX MIO20 1.8V 2,QSPI的配置 采用2片MT25QU256 拼接成8bit的QSPI存储系统。采用1.8V…