2010-08-23 49 views
0

我有一種情況,我正在向命令緩衝區寫入命令。當執行命令緩衝區中的命令時,該命令將被處理並從UART發送到另一個子系統。處理該命令後,需要從UART發出的數據將存儲在隊列中並引發一個標誌。然後在我的主循環檢查後不久檢查標誌是否已經升高,如果是,則將數據從UART發送出去。但是,在處理命令和準備發送UART的時間之間,陣列被破壞。我知道這是因爲我正在使用在線調試器並設置斷點。世界正在發生什麼,我該如何解決這個問題?數組被刪除了

這是會發生什麼的一個示例:

右處理和在隊列存儲(a[]是隊列)後:

a[0] = 0x3; 
a[1] = 0x6; 
a[2] = 0x9; 

右之前它已準備好被髮送出去UART:

a[0] = 0x3; 
a[1] = 0x6; 
a[2] = 0x0; 

,有時甚至,

a[0] = 0x3; 
a[1] = 0x0; 
a[2] = 0x0; 

行爲是隨機的。有時候只有一個字節被破壞,其他時間是兩個字節。

+1

編程語言?代碼示例?等 – 2010-08-23 15:59:06

+0

沒有更多的信息,錯誤可能是字面上的任何東西。你確定'a'被安全地分配了嗎?你確定一切都安全嗎? (例如,你的所有其他指針值是否正確?)是否有任何奇怪的中斷正在跳入並破壞事件? – 2010-08-23 16:23:42

+0

檢出valgrind - 它對於調試像這樣的內存錯誤非常有用。 – alternative 2010-08-23 17:17:15

回答

0

在字節上設置監視。這樣,當任何人寫入它時,調試器將停止。

+0

編程語言爲C,使用MPLAB IDE,ICD2和Microchip PIC24FJGA110 – user428583 2010-08-23 16:01:38

0

聽起來像記憶塗鴉。還有其他的東西意外地訪問你的數組的內存。這可能是由於釋放內存的指針未設置爲NULL,或者可能是某些硬件寫入同一內​​存。不可能說沒有更多的信息。