1. 程式人生 > >陣列溢位與指標問題

陣列溢位與指標問題

錯誤一:

Error connecting to the target:

Error 0x00000220/-1156
Error during: Execution, OCS, 
Lost processor clock. Device may be operating
in a low-power mode.  Do you want to bring it

out of this mode?

錯誤二:

ILLEGAL_ISR() 

需要對三相採集量進行alfa/beta變換,然後FFT處理。做的過程,發現始終顯示丟失時鐘,查了很久發現時陣列訪問越限了,在從384個點下采樣到256個點的時候,邏輯有點不清楚,導致陣列訪問溢位。

陣列溢位問題一定要特別留意,尤其是邊界的條件的時候;

另外,顯示堆疊溢位stack overflow,然後進行ILLEGAL_ISR(),根據網上建議,首先要定位從哪個地方進入了非法中斷,一執行就跑飛,就是去了非法中斷裡面的死迴圈。通過設定斷點,找到了中斷入口是FFT,然後從網上提示,堆疊溢位,可能是區域性變數過多,自己在FFT過程使用了兩個中間變數陣列,改成全域性變數之後就解決了。推測原理是——FFT在主函式裡面做,一旦中斷來了,就必須保護中斷現場,全部壓入堆疊,由於區域性陣列過多,導致了堆疊溢位。

還有一個問題,很隱蔽就是,自己使用了兩個陣列來迴圈取樣一個訊號,通過與一個指標來指向不同的陣列。在取樣完成的時候,交換指標,由於邏輯不清,在交換指標的時候,之前已經將指標換了一次了,再換一次就導致了每次都是講一個數組拿去一邊取樣覆蓋,一邊做FFT,本意是一個用來取樣,另一個用來做FFT。

就是這三個問題,這個週末就花費了。收穫就是,不要怕,遇到問題就鼓起勇氣去解決,總是可以解決的,大不了就是花點時間。

總結:

陣列訪問越限;

指標指錯地方;

區域性變數過多導致堆疊溢位