【问题标题】:C++ Serial Communicating problem with string buffer bytes字符串缓冲区字节的 C++ 串行通信问题
【发布时间】:2023-02-03 16:41:12
【问题描述】:

我制作了可以与串行(“COM3”)端口通信的 C++ 控制台。

Serial 有 API。

  • API

km.move(整数,整数)
print(string) 示例:print('你好,世界?')
km.延迟(整数)

  • Serial 规格

波特率:115200
字节大小:8
停止位:1
奇偶校验:无

我用 uPyCraft IDE, Putty 测试了它。

uPyCraft
Putty

它工作得很好,所以我制作了一个 C++ 控制台(包括 Serilib 库)并尝试编写文件。

但只是有时它工作正常,大多数情况下它不起作用。

我认为这是缓冲区大小问题,但我不知道如何找到并修复它们。

我用下面的代码测试了它

int serialib::writeString(const char *receivedString,int arg)
{
    DWORD dwBytesWritten;
    if(!WriteFile(hSerial,receivedString,arg,&dwBytesWritten,NULL))
        return -1;
    if (!dwBytesWritten)
        return -1;
    return 1;
}
int main()
{

    serial.openDevice("COM3", 115200,SERIAL_DATABITS_16,SERIAL_PARITY_NONE,SERIAL_STOPBITS_1);
    
    if (serial.isDeviceOpen() != true)
    {
        return 1;
    }

    while (true)
    {
        string str;

        cin >> str;

        serial.writeString(str.c_str(), 32);
        if (!cin) break;

    }
}
  • 情况
serial.writeString(str.c_str(), 17~32);
km.move(0,20)

=> 工作正常。 (string length is 13) (sec arg should be 17~32)
第二个arg是大小,可变17~32都很好

serial.writeString(str.c_str(), str.size());
km.move(0,20)

=> 不起作用。 (字符串长度为 13,同上。)(sec arg 不是 17~32)
第二个参数是 13

serial.writeString(str.c_str(), 17~32);
km.move(0,20); -- Included ";"

=> 不起作用。 (当 ; 包括在内时,它是堆叠的,并且当“The Situations”工作正常时,所有堆叠将同时工作。)

但它是堆叠的。我的意思是 km.move(0,-32767 ~ 32767); 的倍数不起作用,但它似乎在堆叠。
当我发送 km.move(0,0~9);km.move(0,10) 时(字符串大小应为 13,它不关心“;”是否包含在内,只会受到字符串长度的影响。我不知道为什么)
我发送的所有堆栈都是同时工作的。

serial.writeString(str.c_str(),17~32);
km.move(0,1);

=> 工作正常。 (这意味着字符串长度应该是 13)

我认为导致此问题的原因是串行的字节大小。

因为当我尝试这个serial.openDevice("COM3", 115200,SERIAL_DATABITS_5~7,SERIAL_PARITY_NONE,SERIAL_STOPBITS_1);时,所有的“情境”都不起作用

  • 结果

DATABITS 应大于 8。
字符串长度应为 13。
bytesize应该是17~32。
包括 ”;”导致堆栈

在 Putty 或 uPyCraft 中,字符串长度与工作无关。

有人帮我用 C++ 串口通信

【问题讨论】:

  • 您并没有真正解释“不起作用”的意思。出了什么问题?此外,如果输入的字符串长度小于 31 个字符,您的代码(main 调用 writeString)将越界访问字符串的缓冲区。
  • 不起作用意味着 => km.move(0.1000) 代码应该将他的位置移动到 0, 1000 但它没有移动。

标签: c++ windows serial-port


【解决方案1】:

我认为导致这个问题的原因是串行的字节大小。

【讨论】:

  • 任何修复的想法?
  • “序列号的字节大小”是什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-17
  • 1970-01-01
  • 1970-01-01
  • 2018-11-24
  • 1970-01-01
相关资源
最近更新 更多