主题:请帮忙分析一下 共有39469人关注过本帖 |
---|
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;     } 两线程不需要同步 |
单帖管理 | 引用 | 回复 |