gpt4 book ai didi

c - BeagleBone 黑色 : UART crashes the BBB after two successful read write calls

转载 作者:行者123 更新时间:2023-11-30 17:04:06 26 4
gpt4 key购买 nike

我在使 UART 与 BBB 保持一致时遇到一些问题。我已按 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]);

}

最佳答案

通过更改为 VMIN=2 以匹配我期望每个读取命令的数据量,问题得到了解决。阅读此页非常有帮助。我认为将 VMIN 设置为高并不是问题,因为即使字节数低于旧的 VMIN 值,我仍然在获取前两个命​​令,但是现在考虑到“我们认为如果 nbytes 是未定义的行为”,那么这是有道理的小于 VMIN。”非常感谢您的帮助!

关于c - BeagleBone 黑色 : UART crashes the BBB after two successful read write calls,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35928907/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com