找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2307|回復(fù): 5
收起左側(cè)

can多包接收解析求解

[復(fù)制鏈接]
ID:378659 發(fā)表于 2023-8-5 17:27 | 顯示全部樓層 |閱讀模式
can一幀數(shù)據(jù)最多8個(gè)字節(jié),發(fā)送超過(guò)8個(gè)字節(jié)就涉及到多幀發(fā)送了,那么接收函數(shù)怎么寫(xiě)?
現(xiàn)在設(shè)想的是把擴(kuò)展標(biāo)識(shí)符拆成8bit發(fā)送地址8bit接收地址8bit發(fā)送長(zhǎng)度,接收方判斷接收數(shù)據(jù)長(zhǎng)度一致或者接收到一幀后后面10ms都沒(méi)收到就判斷接收結(jié)束(超時(shí)處理,避免拆包發(fā)送中發(fā)一幀后突發(fā)死機(jī)不再發(fā)送,那buf會(huì)卡死一直達(dá)不到接收長(zhǎng)度一致的情況)。但是假設(shè)我發(fā)送15個(gè)字節(jié),第一幀發(fā)出去后,恰巧有個(gè)高優(yōu)先級(jí)的插入發(fā)送,后面那個(gè)原本低優(yōu)先級(jí)的又重發(fā),那么我接收端接收到的不就是8Byte+高優(yōu)先級(jí)的數(shù)據(jù)+剩下的7byte,那樣解析就錯(cuò)換了,后來(lái)又想了個(gè)接收方解析,收到的數(shù)據(jù)根據(jù)不同發(fā)送地址設(shè)定不同的接收buf,但是要是節(jié)點(diǎn)一點(diǎn)多那不是要設(shè)立很多buf很麻煩,請(qǐng)問(wèn)有啥更好的方法

回復(fù)

使用道具 舉報(bào)

ID:771630 發(fā)表于 2023-8-6 07:38 | 顯示全部樓層
can不是可以指定地址的么,你把數(shù)據(jù)包拆分成 1字節(jié)的拆分標(biāo)志位,7字節(jié)的數(shù)據(jù),只接收該地址,并判斷拆分標(biāo)志位進(jìn)行數(shù)據(jù)完整度判斷和組合不就行了
回復(fù)

使用道具 舉報(bào)

ID:378659 發(fā)表于 2023-8-7 09:41 | 顯示全部樓層
XLinliY.Zhang 發(fā)表于 2023-8-6 07:38
can不是可以指定地址的么,你把數(shù)據(jù)包拆分成 1字節(jié)的拆分標(biāo)志位,7字節(jié)的數(shù)據(jù),只接收該地址,并判斷拆分標(biāo) ...

一個(gè)節(jié)點(diǎn)不止接收一個(gè)地址的數(shù)據(jù)啊,要是有個(gè)廣播和有個(gè)地址的
回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2023-8-8 14:01 | 顯示全部樓層
1、CAN的硬件系統(tǒng)中有一個(gè)8字節(jié)的數(shù)據(jù)緩沖器,必須寫(xiě)滿8個(gè)字節(jié)才能發(fā)送出去(當(dāng)指令成8字節(jié)時(shí))。不存在發(fā)了3個(gè)再等5個(gè)的問(wèn)題。
2、CAN更高級(jí)端口,不能打正在發(fā)送中尚未結(jié)束的幀,這是CAN的硬件特征。更高級(jí)的CAN端口,即使你用軟件下達(dá)了發(fā)送命令,實(shí)際執(zhí)行時(shí),也會(huì)自己進(jìn)入等待狀態(tài),等總線掛起后(正在發(fā)送的幀結(jié)束)才會(huì)執(zhí)行發(fā)送。
你要更深入地了解CAN通訊的特點(diǎn),了解它的優(yōu)缺點(diǎn)。
回復(fù)

使用道具 舉報(bào)

ID:378659 發(fā)表于 2023-8-9 15:05 | 顯示全部樓層
yzwzfyz 發(fā)表于 2023-8-8 14:01
1、CAN的硬件系統(tǒng)中有一個(gè)8字節(jié)的數(shù)據(jù)緩沖器,必須寫(xiě)滿8個(gè)字節(jié)才能發(fā)送出去(當(dāng)指令成8字節(jié)時(shí))。不存在發(fā) ...

不是,我的意思是假設(shè)有個(gè)低優(yōu)先級(jí)的需要發(fā)送15個(gè)字節(jié),can特性8個(gè)最多,就先發(fā)8個(gè)字節(jié),此時(shí)正常后面會(huì)拆分發(fā)剩下7個(gè)字節(jié),若此時(shí)有高優(yōu)先級(jí)的節(jié)點(diǎn)也發(fā)送了,那我接收端的不就容易錯(cuò)亂嗎
回復(fù)

使用道具 舉報(bào)

ID:378659 發(fā)表于 2023-8-9 15:12 | 顯示全部樓層
yzwzfyz 發(fā)表于 2023-8-8 14:01
1、CAN的硬件系統(tǒng)中有一個(gè)8字節(jié)的數(shù)據(jù)緩沖器,必須寫(xiě)滿8個(gè)字節(jié)才能發(fā)送出去(當(dāng)指令成8字節(jié)時(shí))。不存在發(fā) ...

舉個(gè)例子有三個(gè)節(jié)點(diǎn)abc,a往b節(jié)點(diǎn)發(fā)送 1 2 3 4 5 6 7 8 9共9個(gè)字節(jié),那么發(fā)送一定是先發(fā)送1 2 3 4 5 6 7 8,然后再發(fā)送一幀9,那么若a往b發(fā)送完1 2 3 4 5 6 7 8后此時(shí)恰巧c往b發(fā)送1,2,3優(yōu)先級(jí)又更高,can仲裁一定是先讓c發(fā),那么b節(jié)點(diǎn)接收到的數(shù)據(jù)就會(huì)錯(cuò)亂成 1 2 3 4 5 6 7 8 1 2 3 9
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表