Wince(evc) can 总线 通信 SPI MCP2510

bianchao1 2010-01-09 11:36:49
下面的代码我研究了两个礼拜了,有几处还是不明白,希望大家能不吝赐教。
代码两部分分别是发送按钮和接收线程。

void CCanDlg::OnButton2()
{
// TODO: Add your control notification handler code here
int i,k;
unsigned char temp_data[1024];
DWORD length;

temp_data[0] = 0xa5; //标识符ID的低位。//这里是发送数据定义的标识符ID,共4个字节,用后面的代码计算转换后应该是ID:05a5,但接收线程只接收05a4啊,这是怎么回事?
temp_data[1] = 0x05;
temp_data[2] = 0x00;
temp_data[3] = 0x00; //标识符ID的高位。

UpdateData(TRUE);
i = m_TX_EDIT.GetAllocLength();//得到输入的字符串的长度。
for(k=0;k<i;k++)
{
temp_data[k+4] = (unsigned char)(m_TX_EDIT.GetAt(k) & 0xff);//因为头4个事ID,所以从数组的第五位开始存储要发送的数据。
}
WriteFile(hStr,temp_data,i,&length,&m_osWrite); //这句是发送语句,为什么只发送i个字节,而不是发送i+4个呢?

temp_data[0] = 0xa4; //标识符ID的低位。//这里为什么又定义标识符?这个标识符05a4,和接收线程所接受的是一样的。
temp_data[1] = 0x05;
temp_data[2] = 0x00;
temp_data[3] = 0x00; //标识符ID的高位。
WriteFile(hStr,temp_data,7,&length,&m_osWrite); //这里发送的是什么?为什么只发送7位?
UpdateData(FALSE);
}

int ccount = 0;
//CAN_Bus接收线程函数
DWORD RXINT_Thread(PVOID pArg)
{
unsigned int i,k;
int rxid;
unsigned char temp_data[1024];
DWORD length;
CString str1;
CCanDlg *pWnd = (CCanDlg*)pArg;//指针,这样线程里可以调用updatadate等。

while(1)
{
//读取的长度必需12的倍数,如120,240等等。因为一个数据帧为12个字节,
//前面4个是标识符ID,后面8个是数据。
ReadFile(hStr,temp_data,240,&length,&m_osRead);
rxid = 0;
if(length)
{
for(i=0;i<length/12;i++)
{
//读取标识符到rxid;
rxid = temp_data[i*12] + temp_data[(i*12)+1]*0x100;
rxid = rxid + temp_data[(i*12)+2]*0x10000 + temp_data[(i*12)+3]*0x1000000;//将数组tempdate头4位ID,转换成rxid的形式然后判断。
if(rxid == 0x05a4)
{
ccount = 0;
str1= rx_data;
pWnd->UpdateData(TRUE);
m_RX_EDIT= m_RX_EDIT + str1;
memset(rx_data,0,sizeof(rx_data));
pWnd->UpdateData(FALSE);
break;
}
for(k=4;k<12;k++) //读取每帧里的数据到rx_data,即去除标识符。//我认为应该吧这个for放到if(rxid == 0x05a4)里,不然str1= rx_data;就没有数据了。但是实验证明那样做不对,源代码没错。
{
rx_data[ccount++] = temp_data[(i*12)+k];
}
}
memset(temp_data,0,sizeof(temp_data));//相当于清零。
}
Sleep(3); //加延时
}
return 0;
}

...全文
126 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
gooogleman 2010-01-11
  • 打赏
  • 举报
回复
做过can但是忘记了,呵呵。帮顶。
bianchao1 2010-01-11
  • 打赏
  • 举报
回复
没人会啊?
kyzf 2010-01-09
  • 打赏
  • 举报
回复
帮顶下。

19,498

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧