我正在尝试向arduino发送论点。所以我做了这段代码:

#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

 HANDLE serialPortHandler;
 char *comPort[8] =  {"1", "2", "3", "4", "5", "6", "7", "8"};
 char comPortName[5] = "COM";
 int i = 1;

int openPort(char *name){

    serialPortHandler = CreateFile(name, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
    if(serialPortHandler == INVALID_HANDLE_VALUE){
        return -1;
    }else{
        DCB dcb;
       FillMemory(&dcb, sizeof(dcb), 0);
       if (!GetCommState(serialPortHandler, &dcb)){
          return -1;
       }

       dcb.BaudRate = CBR_9600 ;

       if (!SetCommState(serialPortHandler, &dcb)){
            return -1;
       }
    }
    return 1;
}

int writePort(char *lpBuf,DWORD dwToWrite){
        DWORD dwWritten;
     if(WriteFile(serialPortHandler, lpBuf, dwToWrite, &dwWritten, NULL)){
            while(dwWritten < dwToWrite);
            printf("User: %s, %d", lpBuf, dwWritten);
            return 0;
     }else{
           printf("Error");
           CloseHandle(serialPortHandler);
           return 1;
     }
     return 0;
}




int main(int argc, char *argv[]){
    if(argc != 2)
            return 1;
    strcat(comPortName, comPort[0]);
    while(openPort(comPortName) < 0 && i < sizeof(comPort) / sizeof(int)){
        comPortName[3] = *comPort[i];
        //printf("%s", comPortName);
        i++;
        Sleep(0);
    }if(i >= sizeof(comPort) / sizeof(int)){
         printf("Cannot Find Port");
         scanf("%d");
         return 1;
    }
    printf("Port %s Is Opened - BaudRate 9600\n", comPortName);
    printf("Sent Frequency: %s\n", argv[1]);
    writePort(argv[1], strlen(argv[1]));
}


但是它只有在我以调试模式运行并在WriteFile上等待片刻时才有效。如果我从cmd运行它不会输出到我的arduino。

最佳答案

WriteFile函数具有异步运行的能力。你检查过这种情况了吗?

来自:https://msdn.microsoft.com/en-us/library/windows/desktop/aa365747(v=vs.85).aspx


  如果函数失败或异步完成,则返回值为零(FALSE)。若要获取扩展的错误信息,请调用GetLastError函数。


发生以下情况之一时,将返回WriteFile函数:


请求的字节数被写入。
读取操作将释放管道读取端上的缓冲区空间(如果写入被阻止)。有关更多信息,请参见管道部分。
正在使用异步句柄,并且写入是异步发生的。
发生错误。


(元:我猜不能阻止引用项目符号列表)

关于c - 没有调试,WriteFile无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28976082/

10-12 16:26