主题中讨论的其他器件:HALCOGEN
您好!
我不知道如何解决这个问题。 希望您能给我一些提示。
我正在使用 lwip 1.4.1和不带操作系统的德州仪器 HDK RM57。
我的计划的工作原理:
- 传感器数据在异步模式下通过串行接口传入
- 接收完所有数据后、通过 TCP 将其发送到 PC 上的客户端(服务器为 HDK)
问题:
- 经过一段随机时间(通常大约一小时)后、程序崩溃、出现"数据获取"错误
我注意到的事项:
- L4、L4_ABT、L4_USR 寄存器指向串行接口的问题(错误地址)。 我知道 L4寄存器指向的任何内容不一定意味着问题在于该指令。 L4寄存器是在调试器或电路板注意到问题时设置的、但问题发生的时间可能是之前的几条指令。 但是、我还注意到、当问题发生时、我在串行接口的接收中断例程中使用的缓冲器(在双缓冲器中)指向允许的存储器区域之外的地址。 这个缓冲器是我的应用的一部分、而不是系统级缓冲器。
我执行的测试:
- 我将程序在没有 TCP 服务器的情况下运行了一整天。 传感器数据正以异步模式接收并由主循环处理。 程序未崩溃。
- 我将程序与 TCP 服务器一起运行了一整天、使用一个初始化一次且从未更改的静态缓冲区。 连接到传感器的串行接口未激活。 程序未崩溃。
- 我将程序与 TCP 服务器一起运行了4个小时、并使用双静态缓冲区、该缓冲区每60ms 使用虚拟值更新一次。 连接到传感器的串行接口未激活。 程序未崩溃。 (我这样做是为了测试我的复制功能是否有故障)。
- 我尝试同时运行 TCP 服务器和传感器串行接口、但没有将串行缓冲区复制到 TCP 缓冲区。 TCP 服务器在一个测试中发送了从未更改的单个静态缓冲区、在另一个测试中发送了双静态缓冲区(每60ms 使用虚拟值更新一次)。 在这两个测试中、程序都崩溃。
仅当 TCP 和异步串行通信同时处于活动状态时、才会出现此问题。
(可能相关) PC 上的 TCP 客户端实际上是一个显示我的传感器数据的 GUI。 连接后、传感器数据的"图像"每~2秒"跳跃"一次。 数据错误。 我认为这可能是串行缓冲区到 TCP 缓冲区的复制错误。 但是、在电路板通过 TCP 发送数据之前、它会对数据进行处理并检查数据是否错误或损坏。 如果是、它会发送多个错误信号(LED 和串行调试数据)。 当 GUI 中的图像跳转时、我还会从板上获取错误信号(这意味着数据实际上是错误的)。 当服务器未连接到 GUI 时、我不会从电路板上获得这些错误信号。
这似乎是 TCP 服务器以某种方式影响串行接口(或同一存储器区域?)的中断例程 (并以某种方式破坏其缓冲器?)。
如何检查谁在回收内存? 如何检查 EMAC 驱动程序和串行接口处理程序? 如何检查"端口"是否正在重入不可重入的函数? "port"是 LwIP 对器件和 LwIP API 之间某种接口的调用。 我从 德州仪器教程获得的端口。
我在嵌入式编程方面没有太多经验。 我不知道如何对此进行更深入的调查。 我还可以检查什么以及如何检查? 我的端口可能不正确? 是否有人端口连接到我可以比较的 HDK RM57?
如果您理解我对问题的描述、您认为原因可能是什么? 如果您不理解、请告诉我们、以便我可以更好地解释。
非常感谢您的帮助。
此致、
Julio