C++;未将整个数据写入UART端口 我已经用WiRIPPI测试了C++中的UART通信。

C++;未将整个数据写入UART端口 我已经用WiRIPPI测试了C++中的UART通信。,c++,wiringpi,C++,Wiringpi,问题: < >看来,C++并没有将整个数据输出到UART端口 /DEV/TTYAMA0。也许我做得不对 调查: 注意:我正在使用minicom,minicom--baudrate 57600--noinit--displayhex--device/dev/ttyam0检查接收到的数据 还有UART端口,RX和TX引脚短接在一起 Python代码工作很完美,但是当我尝试在C++中实现它时,接收到的数据是不同的。 预期收到的数据应为:ef 01 ff ff ff 01 00 07 13 00 00

问题:

< >看来,C++并没有将整个数据输出到UART端口<代码> /DEV/TTYAMA0。也许我做得不对

调查

注意:我正在使用minicom
minicom--baudrate 57600--noinit--displayhex--device/dev/ttyam0
检查接收到的数据

还有UART端口,RXTX引脚短接在一起

Python代码工作很完美,但是当我尝试在C++中实现它时,接收到的数据是不同的。 预期收到的数据应为:

ef 01 ff ff ff 01 00 07 13 00 00 00 1b

接收到的数据比较: 使用的语言 从Minicom接收的数据 python ef 01 ff ff 01 00 07 13 00 00 00 1b C++ ef 01 ff ff 01
不能使用
serialput
发送空终止符。与所有类似函数一样,当字符串中遇到空终止符时,它将停止。在这种情况下,我认为最好的选择是添加一个函数,该函数使用WiringPi自己的函数在内部使用的普通
write
函数

您可以创建一个包装器函数,使其看起来与其他调用类似:

#include <cstddef>

void serialWrite(const int fd, const char* data, size_t length) {
    write(fd, data, length);
}

注意:如果您不想创建自己的函数,可以将类似的函数(称为
serialPut
)添加到WiringPi库中,而不是使用主分支版本的官方版本进行下载。

成功了!不过,我花了一段时间重新编译了整个库。非常感谢你@只是一艘帆船,不客气!很高兴它成功了!
template<size_t N>
void serialWrite(const int fd, const char(&data)[N], bool strip_last = true) {
    serialWrite(fd, data, N - strip_last);
}
serialWrite(serial_port, "\xef\x01\xff\xff\xff\xff\x01\x00\x07\x13\x00\x00\x00\x00\x00\x1b");