Это, вероятно, тривиально, но я не могу понять, почему я не читаю обратно в своей программе. Кажется, он отлично работает для всего «сложного материала», и он говорит, что он прочитал 1 (символ/байт), но я не могу его схватить; это похоже на проблемы с сопоставлением типов (это действительно странно, компилятор g ++ (т. е. gcc) btw).Передача буфера чтения данных
Как я изменяю разные варианты Buf (как указатель, char, char array и т. Д.) Я не могу получить доступ к входу.
SO ниже - это урезанный код и версия для синхронизации. Который также должен скомпилировать.
#define WIN32_LEAN_AND_MEAN
#include <stdio.h>
#include <windows.h>
using namespace std;
//**********************************
//******* M A I N ****************
//**********************************
int main()
{
HANDLE hComm;
int choice;
// non overlap test case (2nd last par = 0)
hComm = CreateFile("COM4",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
0);
if (hComm == INVALID_HANDLE_VALUE){
// error opening port; abort
printf("open error COM4\n");
}
else
printf("COM4 open");
printf("\n Hi, this is a UART attempt:"); scanf("%d", &choice);
// build the control block
DCB dcb={0};
printf("******dcb******\n");
dcb.DCBlength = sizeof(dcb);
if (!GetCommState(hComm, &dcb)) printf("Get DCB error"); // I dont think this should be needed ?
if (! BuildCommDCB("4800,n,8,2" , &dcb)) {
// error
printf("COM4 buidDCB -- error\n");
return(1);
}
printf("****here*****\n");
// put the control block into action
if (! SetCommState(hComm, &dcb) ){
// error
printf("COM4 setCommState -- error:%d \n",(int)GetLastError());
return(1);
}
printf("seem successfull \n");
/*************************************READ non-ASYNC TESTING ************************************/
/********************************************************************************************/
char Buf[1];
/* initiate waiting for reading on UART */
DWORD dwRead;
// Issue rea
if (! ReadFile(hComm, Buf, 1 , &dwRead, 0)) {
// Error in communications; report it.
printf("ReadFile --- error:%d",(int)GetLastError());
}
else {
// read completed
printf("read <%d>---%o--- \n",(int)dwRead,Buf[0]);
}
return 0;
} //*** end main ************************************
В то время как я ценю ваше попытайтесь урезать вопрос до разумного минимума, это все еще не [минимальный рабочий пример] (https: // stackoverflow.com/help/mcve) в том смысле, что он может быть скомпилирован и протестирован изолированно. Я также думаю, что вы должны редактировать свои теги. Кажется, что в вашем коде есть много специфических элементов Windows (?). – 5gon12eder
Хорошо, возможно, я должен попытаться подставить этот текст с помощью компиляционного урезанного варианта, скоро сделаю, если я не получу свою голову вокруг этого через некоторые советы. – Georg
ТЕПЕРЬ для БОЛЬШОГО ИЗБИРАТЕЛЬНОГО МЕНЯ: самые трудные ошибки, которые можно найти, - это те, которые не являются ошибками. SBS (= дерьмо за задним колесом) было проблемой. Оказывается, что код полностью жизнеспособен и работает. Только то, что я читал один персонаж, и я не понимал, что дефис (oct55) был первым персонажем, который я отправил по линии UART. Также на линии был начальный мусор. (ваше исправление для [] было правильным, хотя) Так извините, спасибо за помощь./georg – Georg