找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1746|回复: 5
收起左侧

can多包接收解析求解

[复制链接]
ID:378659 发表于 2023-8-5 17:27 | 显示全部楼层 |阅读模式
can一帧数据最多8个字节,发送超过8个字节就涉及到多帧发送了,那么接收函数怎么写?
现在设想的是把扩展标识符拆成8bit发送地址8bit接收地址8bit发送长度,接收方判断接收数据长度一致或者接收到一帧后后面10ms都没收到就判断接收结束(超时处理,避免拆包发送中发一帧后突发死机不再发送,那buf会卡死一直达不到接收长度一致的情况)。但是假设我发送15个字节,第一帧发出去后,恰巧有个高优先级的插入发送,后面那个原本低优先级的又重发,那么我接收端接收到的不就是8Byte+高优先级的数据+剩下的7byte,那样解析就错换了,后来又想了个接收方解析,收到的数据根据不同发送地址设定不同的接收buf,但是要是节点一点多那不是要设立很多buf很麻烦,请问有啥更好的方法

回复

使用道具 举报

ID:771630 发表于 2023-8-6 07:38 | 显示全部楼层
can不是可以指定地址的么,你把数据包拆分成 1字节的拆分标志位,7字节的数据,只接收该地址,并判断拆分标志位进行数据完整度判断和组合不就行了
回复

使用道具 举报

ID:378659 发表于 2023-8-7 09:41 | 显示全部楼层
XLinliY.Zhang 发表于 2023-8-6 07:38
can不是可以指定地址的么,你把数据包拆分成 1字节的拆分标志位,7字节的数据,只接收该地址,并判断拆分标 ...

一个节点不止接收一个地址的数据啊,要是有个广播和有个地址的
回复

使用道具 举报

ID:123289 发表于 2023-8-8 14:01 | 显示全部楼层
1、CAN的硬件系统中有一个8字节的数据缓冲器,必须写满8个字节才能发送出去(当指令成8字节时)。不存在发了3个再等5个的问题。
2、CAN更高级端口,不能打正在发送中尚未结束的帧,这是CAN的硬件特征。更高级的CAN端口,即使你用软件下达了发送命令,实际执行时,也会自己进入等待状态,等总线挂起后(正在发送的帧结束)才会执行发送。
你要更深入地了解CAN通讯的特点,了解它的优缺点。
回复

使用道具 举报

ID:378659 发表于 2023-8-9 15:05 | 显示全部楼层
yzwzfyz 发表于 2023-8-8 14:01
1、CAN的硬件系统中有一个8字节的数据缓冲器,必须写满8个字节才能发送出去(当指令成8字节时)。不存在发 ...

不是,我的意思是假设有个低优先级的需要发送15个字节,can特性8个最多,就先发8个字节,此时正常后面会拆分发剩下7个字节,若此时有高优先级的节点也发送了,那我接收端的不就容易错乱吗
回复

使用道具 举报

ID:378659 发表于 2023-8-9 15:12 | 显示全部楼层
yzwzfyz 发表于 2023-8-8 14:01
1、CAN的硬件系统中有一个8字节的数据缓冲器,必须写满8个字节才能发送出去(当指令成8字节时)。不存在发 ...

举个例子有三个节点abc,a往b节点发送 1 2 3 4 5 6 7 8 9共9个字节,那么发送一定是先发送1 2 3 4 5 6 7 8,然后再发送一帧9,那么若a往b发送完1 2 3 4 5 6 7 8后此时恰巧c往b发送1,2,3优先级又更高,can仲裁一定是先让c发,那么b节点接收到的数据就会错乱成 1 2 3 4 5 6 7 8 1 2 3 9
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表