在線等! 用ch372和tJA1042 做了個(gè)CAN適配器 ,主控芯片M16c29 1、上位機(jī)VB.NET開(kāi)發(fā)用CH375SetIntRoutine設(shè)置中斷獲取數(shù)據(jù),當(dāng)CAN收發(fā)器發(fā)送過(guò)快時(shí)適配器卡死。 2、用CH375SetBufUpload設(shè)置緩沖區(qū)接收時(shí),發(fā)現(xiàn)CAN 500kbps發(fā)送數(shù)據(jù)時(shí)接收數(shù)據(jù)不全(丟幀) 3、請(qǐng)問(wèn)以何種方式接受才能接受到所有數(shù)據(jù)。 在線等!急求
調(diào)用CH375SetBufUpload設(shè)置緩沖上傳模式時(shí),最好創(chuàng)建一個(gè)線程不停的讀數(shù)據(jù),而且每包大小一樣,讀數(shù)據(jù)的大小是包的整數(shù)倍。
你好:首先感謝您提供的幫助;還有幾個(gè)問(wèn)題。 1、1個(gè)包最大64個(gè)字節(jié)?包跟包之間的發(fā)送間隔是1ms? 2、我在上位機(jī)程序里另起了一個(gè)線程接收,在接收時(shí)影響下一數(shù)據(jù)包的接受么。(假設(shè)我正在讀取數(shù)據(jù)時(shí),這時(shí)候下位機(jī)有數(shù)據(jù)傳到)
還有一個(gè)問(wèn)題,在調(diào)試的使用;調(diào)用發(fā)送函數(shù)(發(fā)送包) 240次,接收后產(chǎn)生中斷只產(chǎn)生了134次。
1.我們的端點(diǎn)大小是64,PC端讀寫(xiě)函數(shù)一次讀寫(xiě)最大支持4096個(gè)字節(jié)。 2.不影響,下位機(jī)必須等上包傳完再傳下一包,有個(gè)上傳成功中斷。
丟幀問(wèn)題解決,萬(wàn)分 感謝 新問(wèn)題:當(dāng)速度非??斓臅r(shí)候上傳緩沖區(qū)出現(xiàn)未進(jìn)中斷清空,適配器就卡在那里了,能發(fā)送,但是不能接收了??梢允謩?dòng)清空CH372上傳緩沖區(qū)么。
你上位機(jī)每次讀多少字節(jié)?要盡可能多讀數(shù)據(jù)。
發(fā)送的時(shí)候我一個(gè)包發(fā)送一幀數(shù)據(jù),一個(gè)幀14字節(jié)。
讀的時(shí)候緩沖區(qū)里有多少幀就一起讀出來(lái)
您說(shuō)的多讀數(shù)據(jù)是指讀緩沖區(qū)的次數(shù)么?
如果每包傳14個(gè)字節(jié)的話,可以一次讀4088(14*292,讀函數(shù)最大支持4096)個(gè)字節(jié),不要去查詢包的個(gè)數(shù),直接去讀數(shù)據(jù),讀函數(shù)第3個(gè)參數(shù)會(huì)返回實(shí)際讀到個(gè)數(shù)。
我現(xiàn)在做的是另外啟了一個(gè)線程去讀緩沖區(qū)的數(shù)據(jù),中間沒(méi)有間隔。您的意思是讀跟讀之間加時(shí)間一個(gè)間隔?
加個(gè)Sleep(1)就可以了,還有你下位機(jī)最好是56(14*4)一傳,還有下位機(jī)必須等上包傳完再傳下一包,有個(gè)上傳成功中斷。
N年前和CH375和單片機(jī)折騰過(guò)類似項(xiàng)目。