![]() |
發(fā)布時間: 2017-6-22 18:00
正文摘要:最近公司有個項目上面用的STM32F042K6T6做CAN通信,F在做高低溫測試時總是死機,平時都是正常的,高溫最高60度,低溫最低-20度,死機不是發(fā)生在高溫或者低溫,而是發(fā)生在從60度恢復到0度或者從-20度恢復到0度。MCU ... |
不懂,完全看不懂 |
多半是: 程序中有死待某個標記,用C寫的程序常有此問題(因為按正常邏輯及狀況,這個標記一定會出現,程序未考慮循特殊情況的出現)。 比如:某個硬件在異常狀態(tài)下給不出標記時,程序又死等它出現。 我一般比較注意有死等某個標記地方,在死等的語句中插入時間限制(時間由中間程序控制,計時與死待無關),等不到標記,但時間到了就跳出。 如何找到死等的點呢? 給程序運行加追蹤器: 比如:程序有10個步驟或任務或其它什么,用一個寄存器R_RUN,運行到任務1就讓R_RUN=1,運行到任務N就讓R_RUN=N。也就是說只要知道R_RUN的值就能知道程序運行到什么任務(地方)。 當看門狗復位動作時,運行一個輸出R_RUN的程序(寫一個顯示程序或其它可以輸出的方式) 這樣你就知道,程序死在什么地方了。任務分得越細越易找到問題。 |