2016-08-30 128 views
2

我不希望在这里有代码,而是要了解那里的人的知识。Pyserial - 嵌入式系统

我有一个python代码 - 它使用pyserial与微控制器单元(MCU)进行串行通信。我的MCU是128byte RAM,并有内部存储器。我使用ser.write命令写入MCU和MCU,并用数据进行响应 - 我使用ser.read命令读取它。

这里的问题是 - 它工作出色,直到上周。从昨天开始 - 我只能在当天早上进行串行通信。一段时间后,当我读取数据时,MCU用“无”消息进行响应。我第二天看到数据,它工作正常。奇怪的是 - 我安装了超级终端,它正确地与MCU通信并读取数据。所以我希望以前有人遇到过这个问题。

我在我的python程序中使用线程 - 只是为了检查是否与线程运行程序多次引起的问题。据我所知,线程只应该影响我的PC的内存,而不是MCU。

我重新启动了我的电脑和MCU,我仍然有这个问题。

注意:Pycharm给了我在问题中提到的答案。如果我在IDLE中做同样的事情 - 它给了我完全不同的答案

+0

'缓冲区溢出(pc)','没有握手(pc)','没有设备复位(pc + mcu(出错))'这是你的问题?在MCU中写一些代码'检查计算机是否活着(什么是ACK)',如果不能读取任何东西,则serial_write不是健康检查。 – dsgdfg

回答

3

因此,最终你正在寻找如何调试这种时间依赖问题的建议。 不知何故,状态会在计算机,Python进程或影响事物的微控制器的某处被创建。 (从理论上讲,外部环境因素可能会影响事物,例如,如果你的微控制器有实时时钟,那么实际上可能会有一个时间依赖的错误,这比其他可能性要小)。

首先,请尝试重新启动您的python程序。如果解决了这些问题,那么您知道在python或您的程序中创建了一些状态,导致问题出现。 使用此信息更新您的问题。

如果这样不能解决问题,请尝试重新启动计算机。如果这样能解决问题,那么你强烈怀疑计算机中的某些状态正在影响事物。

如果这些都不起作用,请尝试重新启动微控制器。如果重新启动PC和微控制器不能解决问题,请将其包含在您的问题中,因为这是非常有趣的数据。能够获得创建国家

例子:

  • 流量控制。微控制器可以发送xoff,清除发送或清除发送或以其他方式表明它不需要数据

  • 在另一方向的流量控制:您的PC可以发送xoff,清除请求发送或以其他方式指示它不想要数据

  • 您的程序将pyserial置于混乱状态 - 无论是因为您的代码或pyserial中的错误。

  • 串口配置 - 串口设置可能会变得混乱。

超级终端可以做各种事情来清除流量控制状态或重新配置串口。

如果重新启动python不能解决问题,线程是不太可能成为你的问题。如果重新启动python修复了线程问题可能是一个问题。

+0

我编辑了这个问题。你认为在不使用串行通信一段时间后,状态会被清除掉吗?这可以是计算机特定的吗?因为微控制器运行良好 - 在我的同事使用他编写的GUI的计算机上工作 –