基於MFC串列埠工具實現的多個txt檔案連續傳送
阿新 • • 發佈:2020-12-17
在畢設的學習過程中,需要將minst資料集的圖片轉換成16進位制的txt文字,並將其通過串列埠工具連續傳送到FPGA板子中進行預測,基於之前一個博主所實現的串列埠工具進行部分修改,最終完成了多個txt文件的連續傳送及識別。
其中主要修改的部分為自動傳送部分的程式碼,程式碼主要如下:
void CcommassistDlg::OnBtnAutosend() { // TODO: 在此新增控制元件通知處理程式程式碼 UpdateData(TRUE); m_bAutoSend = !m_bAutoSend;// m_bAutoSend //if (!m_strOut.GetLength()) //{ // MessageBox("請先輸入要傳送的內容", "提示", MB_ICONINFORMATION); // m_bAutoSend = !m_bAutoSend; //} //else // { //if (m_bAutoSend) //{ SetTimer(1, atoi(m_strTimer.GetBuffer(m_strTimer.GetLength())), NULL); //設定定時 m_autosend.SetText("停止"); GetDlgItem(IDC_COMCONTROL)->EnableWindow(false); GetDlgItem(IDC_BTN_CLRTX3)->EnableWindow(false); GetDlgItem(IDC_BTN_CLRRX3)->EnableWindow(false); GetDlgItem(IDC_BTN_HANDSEND)->EnableWindow(false); GetDlgItem(IDC_BTN_SELCTFILE)->EnableWindow(false); GetDlgItem(IDC_BTN_SENDFILE)->EnableWindow(false); CFile file; int k = 0; int i = 9; m_strFile.Empty(); char FileName[256] = { 0 }; int count = 0; CString strTemp; CString str, sTemp; while (k < 1000) { sprintf_s(FileName, "txt1_1/%d_%d.txt", i, count++); m_strFilePath = FileName; //得到檔案路經 FILE* fp; char buf[1571]; memset(buf, 0, sizeof(buf)); fopen_s(&fp,FileName, "r"); if (fp != NULL) { fread(&buf, sizeof(char), sizeof(buf), fp); } fclose(fp); buf[1570] = '\0'; int buf_i = 0; CString str_i; while (buf_i < 1570) { str_i.Format("%c", buf[buf_i]); m_strFile += str_i; buf_i++; } buf_i = 0; m_strOut = m_strFile; //檔案內容加入傳送框變數內 UpdateData(false); //更新發送框內容 //strTemp = ""; m_strFile = ""; OnBtnHandsend(); k++; // if (count == 99 && i == 9) break; Delay(100); OnBtnClrtx(); /* if (count == 99) { i++; count = 0; }*/ } // m_bAutoSend = false; // } /* else { KillTimer(1); m_autosend.SetText("自動傳送"); GetDlgItem(IDC_COMCONTROL)->EnableWindow(true); GetDlgItem(IDC_BTN_CLRTX3)->EnableWindow(true); GetDlgItem(IDC_BTN_CLRRX3)->EnableWindow(true); GetDlgItem(IDC_BTN_HANDSEND)->EnableWindow(true); GetDlgItem(IDC_BTN_SELCTFILE)->EnableWindow(true); GetDlgItem(IDC_BTN_SENDFILE)->EnableWindow(true); }*/ // } }
修改定時器的回撥函式Ontimer(),在裡面終止定時器:
void CcommassistDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此新增訊息處理程式程式碼和/或呼叫預設值 if (nIDEvent == 1) // OnBtnHandsend(); { KillTimer(1); m_autosend.SetText("自動傳送"); GetDlgItem(IDC_COMCONTROL)->EnableWindow(true); GetDlgItem(IDC_BTN_CLRTX3)->EnableWindow(true); GetDlgItem(IDC_BTN_CLRRX3)->EnableWindow(true); GetDlgItem(IDC_BTN_HANDSEND)->EnableWindow(true); GetDlgItem(IDC_BTN_SELCTFILE)->EnableWindow(true); GetDlgItem(IDC_BTN_SENDFILE)->EnableWindow(true); } else if (nIDEvent == 2) return; CDialogEx::OnTimer(nIDEvent); }
下面是傳送6000張圖片的截圖:
串列埠工具所使用的連結如下:
新增連結描述