我想使用C编程语言通过Arduino通过串行端口实时检索数据。 Arduino上的程序:
void setup() {
Serial.begin(9600);
}
int i=1;
void loop() {
Serial.println(i);
delay(1000);
i++;
}
用C语言编写的程序:
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
int main()
{
HANDLE hComm;
hComm=CreateFile("\\\\.\\COM3",GENERIC_READ | GENERIC_WRITE, 0, NULL,OPEN_EXISTING,0,NULL );
BOOL Status;
DCB dcbSerialParams={0};
dcbSerialParams.DCBlength=sizeof(dcbSerialParams);
Status=GetCommState(hComm,&dcbSerialParams);
dcbSerialParams.BaudRate=CBR_9600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;
Status=SetCommState(hComm,&dcbSerialParams);
COMMTIMEOUTS timeouts;
timeouts.ReadIntervalTimeout=50;
timeouts.ReadTotalTimeoutConstant=50;
timeouts.ReadTotalTimeoutMultiplier=10;
timeouts.WriteTotalTimeoutConstant=50;
timeouts.WriteTotalTimeoutMultiplier=10;
Status=SetCommMask(hComm,EV_RXCHAR);
DWORD dwEventMask;
Status=WaitCommEvent(hComm,&dwEventMask,NULL);
char TempChar;
char SerialBuffer[256];
DWORD NoBytesRead;
int i=0;
FILE *fp;
fp=fopen("data.txt", "w");
do{
Status=ReadFile(hComm,&TempChar,sizeof(TempChar),&NoBytesRead,NULL);
SerialBuffer[i]=TempChar;
printf("%c",SerialBuffer[i]);
fprintf(fp, "%c", SerialBuffer[i]);
i++;
}
while(1);
CloseHandle(hComm);
return 0;
}
运行时,发生错误:
请帮助,导致错误的问题是什么?什么是正确的程序?
如注释中所述0xc0000005是访问冲突。
[没有花太多时间来阅读代码(您应该自己调试),如果使用该变量对数组进行索引,通常说在一个无限循环内增加一个变量通常是一个坏主意。
而且您也从不检查您的ReadFile实际上成功。
有一个原因,C书不涵盖索引数组和正确使用控件结构之前的文件阅读。