主題:請幫忙分析一下 共有45875人關注過本帖 |
---|
lqk |
1樓 信息 | 搜索 | 郵箱 |
加好友 發短信 |
Post By:2009-9-3 16:04:00 [顯示全部帖子]
當以5ms為周期或更快速度發送數據時,CAN接收線程將以5ms或更快的速度刷新你的buffer,而你的數據解析線程以5ms為周期工作,這樣有數據就會丟失或出錯
建議在CAN接收線程中用一環形buffer緩存收到的數據。 |
單帖管理 | 引用 | 回復 |
lqk |
2樓 信息 | 搜索 | 郵箱 |
加好友 發短信 |
Post By:2009-9-3 17:10:00 [顯示全部帖子]
在接收線程中,只要收到一幀數據就放入環形buffer中
在解析線程中解析環形buffer中的數據,一直將buffer中的數據讀空為止,對環buf操作時要注意線程同步. |
單帖管理 | 引用 | 回復 |
lqk |
3樓 信息 | 搜索 | 郵箱 |
加好友 發短信 |
Post By:2009-9-4 9:22:00 [顯示全部帖子]
你的同步是不是在解析線程解析數據時,接收線程就不能向ArrayList添加數據了.我覺得這是根你兩個線程的配合有關系。
|
單帖管理 | 引用 | 回復 |
lqk |
4樓 信息 | 搜索 | 郵箱 |
加好友 發短信 |
Post By:2009-9-4 10:49:00 [顯示全部帖子]
數據接收線程: bResult = CAN_GetNextReceivedFrame( ceCAN->m_hCAN, &ceCAN->RxMFrame ); if( bResult ) {     memcpy( ceCAN->ReceiveBuf[ceCAN->m_bufPutIdx], &ceCAN->RxMFrame, 13 );     ceCAN->m_bufPutIdx = ( ceCAN->m_bufPutIdx+1 )% BUF_MAX; } 數據解析線程:     while( m_bufGetIdx != m_bufPutIdx )     {         memcpy( buf, ReceiveBuf[m_bufGetIdx], i );         //數據解析         m_bufGetIdx = (m_bufGetIdx+1) % BUF_MAX;     } 兩線程不需要同步 |
單帖管理 | 引用 | 回復 |
返回首頁請幫忙分析一下 |
---|
用戶名: | |
驗證碼: | |
內容: | |