使用C编程语言从Arduino串行端口检索数据时出错

我想使用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,NULL,OPEN_EXISTING,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;
}

运行时发生错误:

使用C编程语言从Arduino串行端口检索数据时出错

请帮助,导致错误的问题是什么?什么是正确的程序?

squirrel917878 回答:使用C编程语言从Arduino串行端口检索数据时出错

如注释中所述0xc0000005是访问冲突。

如果不花太多时间阅读代码(您应该自己调试),那通常是一个不好的主意,如果该变量用于索引数组,则在无限循环内增加该变量。

此外,您永远不会检查ReadFile实际上是否成功。

C书籍没有涵盖索引数组和正确使用控件结构之前的文件阅读的原因。

本文链接:https://www.f2er.com/3161381.html

大家都在问