本人目前使用LPC23xx系列的ARM7芯片做通信的工程,整個程序只用到CAN、UART、Time幾個外設,其中UART采用中斷接收方式,Time也開了中斷用于產生周期的定時信號值,串口的中斷優先級要高于定時器的。其次主要實現的功能就是定時地通過CAN對CAN總線網絡的其他節點進行收發信息操作,然后轉換成串口數據格式,再由串口進行收發工作。這是基本情況。
可在實際的測試過程中,當我開機后,采用每隔1.6s通過串口下發數據進行查詢時,過了差不多半個小時就沒有返回數據了,采用MDK在線仿真發現每一次都是程序陷入了啟動代碼的DAbt行,如下圖所示。
1號節點開機運行死機.png (277.91 KB, 下載次數: 67)
下載附件
DAbt異常1
2018-5-31 21:43 上傳
然后我采用http://www.zg4o1577.cn/bbs/dpj-121124-1.html 的方法對R14寄存器中的地址值減8并在Command窗口中輸入后程序跳轉到定時器中斷服務程序中,如下圖所示。
反匯編查找2.png (336.95 KB, 下載次數: 69)
下載附件
DAbt2
2018-5-31 21:44 上傳
想請教一下,這種問題的根本原因是因為堆棧溢出嘛,解決這種問題的思路是什么?
謝謝。
|