标题: can多包接收解析求解 [打印本页]

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


作者: XLinliY.Zhang    时间: 2023-8-6 07:38
can不是可以指定地址的么,你把数据包拆分成 1字节的拆分标志位,7字节的数据,只接收该地址,并判断拆分标志位进行数据完整度判断和组合不就行了
作者: 0孙悟空0    时间: 2023-8-7 09:41
XLinliY.Zhang 发表于 2023-8-6 07:38
can不是可以指定地址的么,你把数据包拆分成 1字节的拆分标志位,7字节的数据,只接收该地址,并判断拆分标 ...

一个节点不止接收一个地址的数据啊,要是有个广播和有个地址的
作者: yzwzfyz    时间: 2023-8-8 14:01
1、CAN的硬件系统中有一个8字节的数据缓冲器,必须写满8个字节才能发送出去(当指令成8字节时)。不存在发了3个再等5个的问题。
2、CAN更高级端口,不能打正在发送中尚未结束的帧,这是CAN的硬件特征。更高级的CAN端口,即使你用软件下达了发送命令,实际执行时,也会自己进入等待状态,等总线挂起后(正在发送的帧结束)才会执行发送。
你要更深入地了解CAN通讯的特点,了解它的优缺点。
作者: 0孙悟空0    时间: 2023-8-9 15:05
yzwzfyz 发表于 2023-8-8 14:01
1、CAN的硬件系统中有一个8字节的数据缓冲器,必须写满8个字节才能发送出去(当指令成8字节时)。不存在发 ...

不是,我的意思是假设有个低优先级的需要发送15个字节,can特性8个最多,就先发8个字节,此时正常后面会拆分发剩下7个字节,若此时有高优先级的节点也发送了,那我接收端的不就容易错乱吗
作者: 0孙悟空0    时间: 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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1