我有一块由另一家公司为我们开发的PIC32MX340F512板,板上有DS1338 RTCC和24LC32AEEPROM,以及I2C总线上的显示单元,在这条总线上我包括了一个TSL2561 I2C光传感器,我用c语言写了代码来不断地轮询光传感器,当光传感器达到一定的水平时,我把时间和日期以及光传感器的值保存在SD卡上。这一切都工作得很好,但如果我离开系统时没有暴露在隧道内的光线中,隧道一端的入射光应该受到监控,无论您施加多少光线,系统都会变得没有反应,然后如果我关闭电源,然后重新打开,一切都开始正常工作。我是一个人的开发团队,几个月来一直在试图找出问题,我激活了看门狗计时器以防止系统挂起,但问题仍然存在。然后我决定通过包括一个按钮来激活光测量来找出问题是否与传感器有关,但当4-5个小时过去时,PIC甚至无法检测到输入引脚的变化。考虑到硬件重置会覆盖任何正在进行的操作,我添加了一个重置按钮,在此之后的最初几个小时内,PIC似乎对包括重置在内的任何操作都没有响应。我越来越确信固件没有问题,但所有这些都发生在I2C上的显示单元(pic16f1933和液晶屏)与主单元共享电源,似乎没有受到影响,因为它不断地在不同的消息之间交替。有人知道哪里可能出问题(硬件/固件或我的传感器)。我使用的是单独购买的24v直流电源。虽然我没有在我的代码中实现任何类型的睡眠模式,但PIC似乎进入了深度睡眠。注意:我们在许多其他项目中使用相同的面板,我还没有遇到过这样的问题。提前谢谢。
发布于 2013-11-24 16:54:58
我认为您需要(如果您还没有)探索在线调试的奇妙世界(例如使用ICD3或PICkit 2/3)。它允许您以一种特殊的模式运行处理器,该模式允许您暂停执行,查看正在执行的确切代码行,检查变量值,单步执行代码以查看哪些部分正在运行,哪些部分没有运行,或者确切地查看执行在哪里发生了错误。如果问题需要几个小时才能重现,也没问题。你可以让它在调试模式下运行一夜,希望第二天早上它会被锁定或“睡眠”。此时,您将能够暂停处理器并查看是否陷入了某种无限循环或其他情况。这通常是挖掘正在运行的代码片段以了解为什么事情不像您期望的那样工作的唯一方法。但正如您所说,那些需要几个小时或几天才能显露出来的bug是最棘手的。祝好运!
发布于 2014-01-23 11:37:21
听起来你可以把你的设计分成两个主要部分,SD卡接口,读取rtc和读取光传感器。如果是我,我会上传一个模拟读取光传感器的代码版本,但只返回虚假数据,看看这是否解决了问题。此外,分别对其他两个模块执行相同的操作,并查看项目的三个版本中是否有任何一个没有显示此问题。从那里开始,继续缩小范围,直到你找到导致问题的代码块。
如果两个或更多版本的调试代码显示相同的问题,那么我猜测这与某个通信协议有关。当我将Pic32与SPI卡外设结合使用时,我遇到了一个DMA硅版本阻塞的问题。所以我建议你检查你的芯片的勘误表。
如果您仍然找不到问题,我唯一的建议是检查内存泄漏或数组是否增长到保留内存中。
希望这对你有帮助,祝你好运!
https://stackoverflow.com/questions/19511392
复制相似问题