C 如何使用Arduino正确发送无符号长字节?
我正在测试与Arduino的串行通信,如下所示:C 如何使用Arduino正确发送无符号长字节?,c,arduino-uno,serial-communication,C,Arduino Uno,Serial Communication,我正在测试与Arduino的串行通信,如下所示: timeStamp = 0xFFFFFFFF; Serial.flush(); Serial.write((uint8_t*)timeStamp, 4) 另一方面,我用C程序中的read(fd,&rx,4)读取这个字节。我希望总是读取相同的值,但不是读取0xffffffff而是读取0x37066bf,因此解码有问题。Ps:我已将串行端口设置为读取原始字节,因此没有专用字节来编码回车符或其他特殊字符。我相信您的问题在于串行写入(
timeStamp = 0xFFFFFFFF;
Serial.flush();
Serial.write((uint8_t*)timeStamp, 4)
另一方面,我用C程序中的
read(fd,&rx,4)
读取这个字节。我希望总是读取相同的值,但不是读取0xffffffff
而是读取0x37066bf
,因此解码有问题。Ps:我已将串行端口设置为读取原始字节,因此没有专用字节来编码回车符或其他特殊字符。我相信您的问题在于串行写入((uint8_t*)时间戳,4)
总是从内存中发送4个字节,以地址0xffffff
开头。这是因为timeStamp
不是指针,但您将其强制转换为指针。请尝试转换timeStamp
的地址:Serial.write((uint8_t*)(&timeStamp)),4)代码>并查看是否有效 我相信您的问题在于您的串行写入((uint8_t*)时间戳,4)
总是从内存中发送4个字节,以地址0xffffff
开头。这是因为timeStamp
不是指针,但您将其强制转换为指针。请尝试转换timeStamp
的地址:Serial.write((uint8_t*)(&timeStamp)),4)代码>并查看是否有效 您需要发布发送和接收代码,并提供更多关于这两个平台的数据。例如,read()
实际返回的值是什么?我强烈怀疑您忽略了read()
中的实际返回值,只是希望它能够工作。您需要确信hello world测试正在工作。发送一些字符串,读取循环中的字符并打印它们。这行吗?电缆掉出来了吗?也许在PC端使用终端软件。通常需要禁用硬件/软件流控制。发送字符将很容易测试。哦!你发送FFFFFF然后得到垃圾。这有波特率的味道。再次使用关闭流量控制的终端应用程序。反复发送Hello World并调整术语设置,直到它开始正确显示。然后让你的应用程序读做同样的事情。什么是无符号长字节
,因为你没有听说过。你需要发布发送和接收代码,并提供更多关于这两个平台的数据。例如,read()
实际返回的值是什么?我强烈怀疑您忽略了read()
中的实际返回值,只是希望它能够工作。您需要确信hello world测试正在工作。发送一些字符串,读取循环中的字符并打印它们。这行吗?电缆掉出来了吗?也许在PC端使用终端软件。通常需要禁用硬件/软件流控制。发送字符将很容易测试。哦!你发送FFFFFF然后得到垃圾。这有波特率的味道。再次使用关闭流量控制的终端应用程序。反复发送Hello World并调整术语设置,直到它开始正确显示。然后让你的应用程序读做同样的事情。什么是无符号长字节
,因为我没有听说过。我很高兴听到这一点,而且没有严重的问题与波特率,硬件/软件流量控制等有关,就像你问题的评论中提到的家伙。我将根据这些评论制作一个小的清单,以供将来使用串行通信,因为它们提供了非常好的要点。我之所以看到这个缺失,是因为我在某些情况下也犯了同样的错误(一次被咬,两次害羞):。我很高兴听到这一点,而且没有像你的问题评论中提到的那样,与波特率、硬件/软件流控制等相关的严重问题。我将根据这些评论制作一个小的清单,以供将来使用串行通信,因为它们提供了非常好的要点。我之所以看到缺失,是因为我在某些情况下也犯了同样的错误(一次被咬,两次害羞):。