C語言哪些變量可能導致棧溢出?
開發者要問的是單片機應用中變量定義多導致的堆棧溢出問題。單片機的臨時變量存儲區分內部變量存儲區ram和外部變量擴展區xram/sram。應用程序中堆棧的空間占用了內部ram區域的空間。如果由開發者定義的變量s應用程序占用內部ram區域過多,就容易導致應用程序中的堆棧溢出。所以建議開發者在對程序運行時間沒有嚴格要求的情況下,盡量限制在外部ram中定義變量。
單片機堆棧溢出后會怎樣工作,是不是會復位?
單片機的堆棧溢出后,根據其位置不同,會不同程度地影響運行,或進入死循環或產生不可預知的結果。如果看門狗沒有開啟,它不太可能被復位。第一,如果棧頂設置為低級,比如兩個FH,預期的棧空間是一個或六個字節,如果溢出,如果用戶使用40h,用戶寄存器的值可能會改變。這種影響是雙重的。首先,它改變了用戶的運行結果。第二,堆棧存儲子程序地址時,會出現不可預知的結果,執行后回不去。第二,如果棧頂設置在高位,比如FH,如果溢出,那么推入棧的值會保存在一個虛擬空間,也就是0小時后的RAM空間。這個RAM空間不存在,所以結果會不正確。如果保存了地址,它將無法返回到保存的位置。
8051單片機里的計數器溢出后會申請中斷嗎?
計數器溢出后會產生中斷請求,但單片機是否產生中斷,即是否響應這個中斷,取決于程序如何配置計數器溢出中斷。如果允許計數器溢出中斷,即I
單片機運行一段時間后,不按原程序執行怎么回事/?
根據我多年的經驗,這個問題一般有三個原因:1你的軟件是編寫中的BUG,比如你想實現功能A,但是因為你的程序在編寫中有問題,比如算法有問題,語法有漏洞,你的思考不全面,在一定條件下可以實現功能A,但是當條件稍有變化,程序就和你的執行不一致了。
單片機硬件被干擾,比如單片機周圍有強電,或者單片機使用的繼電器,但是電路處理不好等等。,導致程序跑偏。
3內存溢出比如你聲明了一個數組A[],但是在程序執行的過程中,你的程序不夠嚴謹,在調用A[],不小心讓它超出了自己的極限,等等。以我個人的經驗,第一個原因是你出現這種現象的主要原因,其次是第三個原因。第二個原因一般不容易出現,除非硬件是新手做的。建議你從第1、2項入手,找出原因。