我用ch372,底層單片機控制CH372使用端點1發(fā)送數(shù)據(jù), 上層用CH375SetIntRoutine設(shè)置為中斷服務,可以進中斷,但是每次用CH375ReadInter讀數(shù)據(jù)都會死機, 用端點2讀寫的話,都是正常的,請問這是什么情況啊
我們不建議這樣使用。CH375SetIntRoutine在內(nèi)部會創(chuàng)建一個線程來循環(huán)讀中斷端點,如果有讀到數(shù)據(jù)上來就會調(diào)用你的中斷服務,如果這時你在調(diào)用CH375ReadInter這個函數(shù),它會繼續(xù)再發(fā)送請求讀中斷端點,但這時中斷端點的數(shù)據(jù)已經(jīng)被之前的線程讀取走了,所以會函數(shù)會一直等待到下一次中斷端點有數(shù)據(jù),造成死機的情況。 同時我們也不建議使用CH375SetIntRoutine這個函數(shù)。
根據(jù)你的說法,“但這時中斷端點的數(shù)據(jù)已經(jīng)被之前的線程讀取走了”,
然后我找到了2009年1月7號的一個帖子,鏈接如下http://m.findthetime.net/bbs/View.asp?S=101&I=31521 ,其中zyw 用戶回復了“mInterruptEvent(ByRef mBuffer As INT_PARA) 函數(shù)調(diào)用結(jié)束后那8個字節(jié)的數(shù)據(jù)就沒有了,實際上已經(jīng)被中斷讀走了,mBuffer里就是指向的那8個數(shù)據(jù)”,
我是否可以理解為,在調(diào)用回調(diào)函數(shù)的時候,數(shù)據(jù)已經(jīng)讀走了,那我怎樣才能拿到這個被讀走的數(shù)據(jù)呢
typedef VOID ( CALLBACK * mPCH375_INT_ROUTINE ) ( PUCHAR iBuffer ); 其中iBuffer指向一個緩沖區(qū),提供當前的中斷特征數(shù)據(jù),也就是你要的數(shù)據(jù),就是說你提供的中斷服務程序在被調(diào)用時,函數(shù)的參數(shù)傳給你的值就是中斷數(shù)據(jù)數(shù)組的指針,8個字節(jié)