|
楼主 |
发表于 2010-4-8 17:35:16
|
显示全部楼层
//写页面地址,及bin文件大小
filelength_b = file.GetLength();
filelength_k = filelength_b/1024;//多少K字节
filelength_b = filelength_b%1024;//按1K取模
m_ctrDownProgress.SetRange(0, filelength_k/10);
m_ctrDownProgress.SetPos(0);
tbuffer[0] = page_begin&0xff;//页面低8位地址
tbuffer[1] = (page_begin>>8)&0xff;//页面高8位地址
tbuffer[2] = filelength_k&0xff;
tbuffer[3] = (filelength_k>>8)&0xff;
tbuffer[4] = filelength_b&0xff;
tbuffer[5] = (filelength_b>>8)&0xff;
bWriteState = WriteFile(hCom, tbuffer, 6, &dwBytesWrite, NULL);
if (bWriteState)
{
bReadState = ReadFile(hCom,rbuffer,6,&dwBytesRead,NULL);
PurgeComm(hCom, PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
if (bReadState)
{
if(memcmp(rbuffer, tbuffer, 6) != 0)
{
AfxMessageBox("下载文件失败, page and size!");
return;
}
}
}
/*----------------------------- 下载前的交互 end -------------------------------------/
/****************************** 下载bin文件 begin ***************************************/
do
{
uLen = file.Read(tbuffer, 1024);
if (uLen)
{
//写串口
bWriteState = WriteFile(hCom, tbuffer, uLen, &uLen, NULL);
Sleep(60);
//读串口
if(bWriteState)//如果写成功
{
bReadState=ReadFile(hCom,rbuffer,uLen,&uLen,NULL);
PurgeComm(hCom, PURGE_RXCLEAR | PURGE_TXCLEAR);
counter++;
if(counter%10 == 0)
{
m_ctrDownProgress.SetPos(counter/10);
CRect rect;
m_ctrDownProgress.GetWindowRect(rect);
m_ctrDownProgress.InvalidateRect(&rect,TRUE);
m_ctrDownProgress.UpdateWindow();
}
if (bReadState)//如果读成功
{
if(memcmp(tbuffer, rbuffer, uLen) != 0)// 比较写和读的内容
{
AfxMessageBox("下载文件失败:不一致!");
GetDlgItem(IDC_TEXT)->SetWindowText(" ");
return;
}
}
}
else
{
AfxMessageBox("下载文件失败:写失败!");
GetDlgItem(IDC_TEXT)->SetWindowText(" ");
return;
}
}
} while(uLen == 1024);
/****************************** 下载bin文件 end ***************************************/
AfxMessageBox("文件下载完成!");
GetDlgItem(IDC_TEXT)->SetWindowText(" ");
} |
|