2013-10-22 44 views
0

我有一塊PIC32MX340F512板,由另一家公司爲我們開發,板上有一個DS1338 RTCC和24LC32A eeprom,以及I2C總線上的顯示單元,在這個總線上包括一個TSL2561 I2C光傳感器,我寫了c代碼來連續輪詢光線傳感器,當光線傳感器達到一定的水平時,我將時間和日期以及光線傳感器值保存在SD卡上。這一切都可以正常工作,但如果我離開系統而沒有暴露於隧道內的光線,隧道一端的入射光線應該被監控,無論您使用多少光線,系統都將無法響應,然後如果我切斷電源然後再次開始正常工作。我是一個單人開發團隊,幾個月來一直試圖找出問題,我激活了看門狗定時器以防止系統掛起,但問題仍然存在。然後我決定通過包含一個按鈕來激活光測量來發現問題是否與傳感器有關,但是當4-5小時後PIC仍然無法檢測到輸入引腳的變化。在硬件重置覆蓋任何正在進行的操作的印象中,我包括一個重置按鈕,並且在此之後的前幾個小時它也可以正常工作,PIC似乎沒有響應包括重置在內的任何事情。我越來越確信固件沒有問題,但隨着所有這些情況的發生,I2C上的顯示單元(pic16f1933和lcd)與主機共享電源,並且似乎不會受到影響,因爲它不斷在不同的消息之間交替有沒有人知道什麼可能是錯的(硬件/固件或我的傳感器)。我正在使用單獨購買的24伏直流電源。 PIC似乎進入了深度睡眠,雖然我沒有在我的代碼中實現任何種類的SLEEP模式。鈮我們在許多其他項目中使用相同的電路板,但我還沒有遇到過這樣的問題。提前致謝。PIC32在幾個小時後變得沒有響應

回答

0

我認爲你需要(如果你還沒有)探索在線調試的美妙世界(例如ICD3或PICkit 2/3)。它允許您以特殊模式運行處理器,讓您暫停執行,準確查看正在執行的代碼行,檢查變量值並遍歷代碼,以查看哪些部分正在運行且未運行,或準確查看哪裏執行錯誤。如果問題需要數小時才能重現,那沒關係。你可以讓它一夜之間在調試模式下運行,並希望在早上它會被鎖定或「睡覺」。在這一點上,你將能夠暫停處理器並徘徊,看看你是否陷入了某種無限循環或什麼。這通常是挖掘一段代碼的唯一方法,以瞭解爲什麼事情不像您期望的那樣工作。但正如你所說,那些需要數小時或數天才能顯現的錯誤是最棘手的。祝你好運!

0

聽起來好像你可以將你的設計分成兩個主要部分,SD卡接口,讀取rtc和讀取光線傳感器。如果是我,我會上傳一個模仿閱讀光線傳感器的代碼版本,但只返回假數據,看看是否能解決問題。另外,請分別對其他兩個模塊進行相同的操作,看看您的項目的三個版本中是否有任何一個未顯示此問題。從那裏繼續縮小它直到找到導致問題的代碼塊。

如果兩個或多個版本的調試代碼顯示相同的問題,那麼我的猜測就是它與其中一個通信協議有關。當將DMA與SPI外設結合使用時,我遇到了Pic32芯片版本阻塞的問題。所以我會建議檢查你的芯片的勘誤。

如果你仍然無法找到問題,我唯一的建議將是檢查內存泄漏或增長到保留內存的數組。

希望有所幫助,祝你好運!

相關問題