【发布时间】:2023-02-03 16:41:12
【问题描述】:
我制作了可以与串行(“COM3”)端口通信的 C++ 控制台。
Serial 有 API。
- API
km.move(整数,整数)
print(string) 示例:print('你好,世界?')
km.延迟(整数)
- Serial 规格
波特率:115200
字节大小:8
停止位:1
奇偶校验:无我用 uPyCraft IDE, 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)
第二个参数是 13serial.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