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