BeagleBone Black:UART在两次成功的读写调用后崩溃BBB

时间:2016-03-10 22:47:20

标签: c beagleboneblack uart

我在使用BBB获得一致的UART时遇到了一些麻烦。对于非规范输入,我已按照this page所示进行了设置。即使在第三个周期,我似乎能够传输得很好。这是读取命令似乎让我。我甚至不确定从哪里开始,所以任何指针都将非常感谢!这是我正在使用的代码:

编辑:为了特异性

当我说两个读写调用时,我的意思是我的循环按预期执行两次。我发出数据并准确读出我的预期。在第三次尝试阅读时,在“写入数据...”printf执行之后,程序崩溃了。我仍然可以像往常一样按CTRL-C运行BBB,重启程序会让我在出现同样问题之前再次读取和写入两次。

对于while循环条件,我意外忘记在下面看到的代码中添加read_test变量的初始化。我正在将这个串行通信添加到一个更大的程序中,控制我研究的机器人。我相信我已经捕获了所有相关的代码,这个测试是在我初始化我需要的所有变量后发生的第一件事,但是如果整个文件都有用,我可以添加它。

void SERIAL_Init(void)
{
/*******************************************************************/
  printf("\tSerial Port Initialization ...");
    SERIAL_fd = open(MODEMDEVICE,O_RDWR | O_NOCTTY /*| O_NDELAY*/);
  if (SERIAL_fd < 0)
    { perror(MODEMDEVICE);
      exit(-1);
    }
  fcntl(SERIAL_fd,F_SETFL,0);
  tcgetattr(SERIAL_fd,&newtio);
  newtio.c_cflag |=  CS8 | CLOCAL | CREAD ;
  cfsetispeed(&newtio,BAUDRATE);
  cfsetospeed(&newtio,BAUDRATE);
  newtio.c_iflag = IGNBRK | IGNPAR;
  newtio.c_oflag = 0;
  newtio.c_lflag = 0;
  newtio.c_cc[VTIME]=0;             /* inter-character timer unused */
  newtio.c_cc[VMIN]=31;             /* blocking read until 18 chars received */
  tcflush(SERIAL_fd,TCIFLUSH);
  tcsetattr(SERIAL_fd,TCSANOW,&newtio);
  /****************************************************************/
  printf("Done\n");
  return;
}

//Test data for reading serial
    unsigned char test_data[2] = {0x00,0x00};

//Read from maestro command
    unsigned char read_command[2][2] = {
        {0x1a,0x2b},
        {0x90,0x05},
    };

while(readTest == 0)
    {
        printf("Enter 0 to read from maestro pin, 1 to continue with testing\n");
        scanf("%d",&readTest);

        write(SERIAL_fd,read_command[0],2);
        printf("Wrote values...\n");
        num_bytes = read(SERIAL_fd,&test_data,2);
        printf("Value read: %x %x\n",test_data[0],test_data[1]);

    }

1 个答案:

答案 0 :(得分:0)

通过更改为VMIN = 2来解决问题,以匹配每个读取命令所期望的数据量。阅读本页非常有帮助。我认为将VMIN设置为高并不是问题,因为即使字节数低于旧的VMIN值,我仍然需要前两个命令,但是现在这有意义了#34;我们相信如果nbytes小于VMIN,则表示未定义的行为。&#34;非常感谢你的帮助!