0

我有另一家公司为我们开发的 PIC32MX340F512 板,该板有一个 DS1338 RTCC 和 24LC32A eeprom,以及 I2C 总线上的显示单元,在这条总线上我包括一个 TSL2561 I2C 光传感器,我用 c 编写代码来轮询光传感器连续,当光传感器达到一定水平时,我将时间和日期以及光传感器值保存在 SD 卡上。这一切都很好,但是如果我离开系统时没有暴露在隧道内的光线下,隧道一端的入射光应该被监控,无论你应用多少光,然后如果我关闭电源,系统都会变得无响应然后重新开始,一切都开始正常工作。我是一个单人开发团队,几个月来一直试图找出问题所在,我激活了看门狗定时器以防止系统挂起,但问题仍然存在。然后我决定通过包含一个按钮来激活光测量来确定传感器是否存在问题,但是当 4-5 小时过去后,PIC 甚至无法检测到输入引脚的变化。给人的印象是硬件重置会覆盖正在发生的任何事情,我包括了一个重置​​按钮,并且在最初的几个小时内它也可以正常工作,之后 PIC 似乎没有响应任何事情,包括重置。我确信固件没有问题,而且所有这些都发生了,I2C 上的显示单元(pic16f1933 和 lcd)与主单元共享电源并且没有 似乎没有受到影响,因为它不断在不同的消息之间交替出现有没有人知道可能出了什么问题(硬件/固件或我的传感器)。我使用的是单独购买的 24v 直流电源。尽管我没有在我的代码中实现任何类型的睡眠模式,但 PIC 似乎进入了深度睡眠。注意我们在许多其他项目中使用相同的板,我没有遇到过这样的问题。提前致谢。

4

2 回答 2

0

听起来您可以将设计分为两个主要部分,SD 卡接口、读取 rtc 和读取光传感器。如果是我,我会上传一个模拟读取光传感器但只返回虚假数据的代码版本,看看是否能解决问题。另外分别对其他两个模块执行相同的操作,并查看项目的三个版本中的任何一个是否没有显示此问题。从那里继续缩小范围,直到找到导致问题的代码块。

如果您的调试代码的两个或多个版本显示相同的问题,那么我的猜测是它与其中一种通信协议有关。在将 DMA 与 SPI 外设结合使用时,我遇到了 Pic32 芯片版本阻塞的问题。所以我建议检查你的芯片的勘误表。

如果您仍然找不到问题,我唯一的建议是检查内存泄漏或正在增长到保留内存的数组。

希望对你有帮助,祝你好运!

于 2014-01-23T03:37:21.380 回答
0

我认为您需要(如果您还没有)探索在线调试的美妙世界(例如使用 ICD3 或 PICkit 2/3)。它允许您以一种特殊模式运行处理器,让您可以暂停执行、准确查看正在执行的代码行、检查变量值,并单步执行代码以查看哪些部分正在运行和未运行,或者查看确切的位置执行错误。如果问题需要几个小时才能重现,那没关系。你可以让它在调试模式下运行一夜,希望它会在早上被锁定或“休眠”。此时,您将能够暂停处理器并四处寻找,看看您是否陷入某种无限循环或其他什么东西。这通常是深入研究正在运行的代码以了解原因的唯一方法 t 工作如你所愿。但正如你所说,那些需要数小时或数天才能显现出来的错误是最棘手的。祝你好运!

于 2013-11-24T08:54:58.460 回答