gpt4 book ai didi

realbasic 测试串行端口以查看它是否存在

转载 作者:行者123 更新时间:2023-12-02 02:01:20 24 4
gpt4 key购买 nike

我正在编写一个 realbasic 控制台应用程序,它轮询多个串行端口的数据并将结果保存到数据库中。

我最初的想法是打开端口,读取数据然后再次关闭它,问题是打开一个串口最多需要4秒,我可能需要从多达8个端口读取,所以打开每个周期都关闭端口是不切实际的。

串口设备很有可能从打开的端口断开连接,当然这会导致问题。

那么是否有可能检测端口是否打开并处于事件状态,以便我可以让端口保持打开状态,只有在我检测到连接的设备已经消失时才关闭并重新打开它。

编辑

串行端口是蓝牙串行端口,它与蓝牙 radio 通信,而蓝牙 radio 又与微 Controller 通信。我有我监听的开始和结束字符,所有这些工作正常,直到蓝牙设备超出范围并有效断开连接,使串口仍然打开。

我当然可以关闭端口并尝试再次打开它,但我想检测设备是否仍然连接到蓝牙串口。

此外,在 OSX 上的串行端口上调用 serial.close() 会导致瞬间卡住(桌面光标卡住),我怀疑 100% 的 cpu 使用率,这不会发生在 Windows 上,因此我想尽量减少端口数量打开和关闭我必须做的事情,因为我每分钟轮询一次来自大约 10 个蓝牙设备的数据。

由于打开串行端口最多需要 4 秒,因此最好的解决方案是使用直接 HID 连接到蓝牙 radio 而不是 SPP 串行连接,但是似乎没有人将 realbasic 连接到蓝牙之前隐藏设备,因此没有关于它的信息或帮助。

最佳答案

我在 RB 中进行串行编程已经有几年了,所以我不记得所有的事情了。

Serial 类有一个“LineStateChanged”事件。一旦 BT conn 丢失或重新连接,您是否检查过它是否被调用?

如果这不起作用,您可以尝试使用低级 BSD/POSIX 函数打开端口并使用 ioctl() 调用来确定其状态。不过,我没有任何例子。而且我什至不确定这是不是正确的方法。这可能归结为了解 C 程序会做什么,并将其转换为 RB。

关于糟糕的表现:这通常是由于 RB 对其事件管理的控制有限:它没有看到它需要更频繁地轮询串口,因此只要它没有其他的就很少检查它向操作系统请求更多空闲时间的原因。诀窍是高频率运行定时器(例如每 10 毫秒一次),然后从定时器的 Action 事件中调用串口的 Poll 函数。

关于realbasic 测试串行端口以查看它是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17119175/

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