cpu使用会影响串口数据的读取吗?
Does cpu usage affect reading of serial data?
我不确定这是否是一个明显的问题,但我对串行通信有点陌生(至少从未在这个深度考虑过它)并且对 Python 非常陌生。我有一个 Raspberry Pi 和一个线性执行器。线性执行器有一个 API,它提供使用 PySerial 读取和写入硬件的函数,这些是我用来尝试与执行器通信的。
我已经实现了一个更复杂的代码,通过DDS接收请求数据,但最终代码的目的是将从该请求数据中提取的位置值写入线性执行器,并在return中接收线性执行器的位置值。它可以写入硬件 OK,并根据需要写入线性执行器 extends/retracts,但是从硬件读取位置反馈会导致超时,如果我增加超时值或将 serial.read() 更改为 serial.read(1)(通过直接更改 API 中的代码),它改为读取 b''。我注意到我的代码在 运行 时使用 100.7% CPU。当我阅读时,它上升到 101%。
我还有另一个更基本的代码,只有几行,可以简单地读取和写入线性致动器,没有 DDS 的东西。相反,传递给执行器的位置值是硬编码的。这一个使用与 API 中相同的 read/write 函数,没有像我对其他代码所做的那样进行更改。当使用这个非常基本的代码进行测试时,它只显示 5% CPU 使用率并且读取位置反馈就好了。
我不明白为什么它适用于基本代码而不适用于其他代码,特别是因为 writing/reading 时的操作顺序是相同的,并且使用了完全相同的函数和参数。我开始怀疑更多代码的高 CPU 使用率是否会影响串行数据的读取。
你们中有人知道高 CPU 使用率是否会影响 PySerial 读取数据的能力吗?两者有关联吗?
如果您达到 CPU 使用量的上限,则读取数据的 PySerial 进程可能无法在下一次采样 window 之前完成每个周期(例如您的代码每秒需要一个样本,但循环需要两秒钟才能完成)。添加太多进程或 CPU-heavy 个进程最终会导致 CPU 成为瓶颈。
我不确定这是否是一个明显的问题,但我对串行通信有点陌生(至少从未在这个深度考虑过它)并且对 Python 非常陌生。我有一个 Raspberry Pi 和一个线性执行器。线性执行器有一个 API,它提供使用 PySerial 读取和写入硬件的函数,这些是我用来尝试与执行器通信的。
我已经实现了一个更复杂的代码,通过DDS接收请求数据,但最终代码的目的是将从该请求数据中提取的位置值写入线性执行器,并在return中接收线性执行器的位置值。它可以写入硬件 OK,并根据需要写入线性执行器 extends/retracts,但是从硬件读取位置反馈会导致超时,如果我增加超时值或将 serial.read() 更改为 serial.read(1)(通过直接更改 API 中的代码),它改为读取 b''。我注意到我的代码在 运行 时使用 100.7% CPU。当我阅读时,它上升到 101%。
我还有另一个更基本的代码,只有几行,可以简单地读取和写入线性致动器,没有 DDS 的东西。相反,传递给执行器的位置值是硬编码的。这一个使用与 API 中相同的 read/write 函数,没有像我对其他代码所做的那样进行更改。当使用这个非常基本的代码进行测试时,它只显示 5% CPU 使用率并且读取位置反馈就好了。
我不明白为什么它适用于基本代码而不适用于其他代码,特别是因为 writing/reading 时的操作顺序是相同的,并且使用了完全相同的函数和参数。我开始怀疑更多代码的高 CPU 使用率是否会影响串行数据的读取。
你们中有人知道高 CPU 使用率是否会影响 PySerial 读取数据的能力吗?两者有关联吗?
如果您达到 CPU 使用量的上限,则读取数据的 PySerial 进程可能无法在下一次采样 window 之前完成每个周期(例如您的代码每秒需要一个样本,但循环需要两秒钟才能完成)。添加太多进程或 CPU-heavy 个进程最终会导致 CPU 成为瓶颈。