2017-04-18 55 views
-2

我有一個用C編寫的應用程序,它運行在Coldfire處理器上。Coldfire強制使用RAM而不是寄存器

我需要強制它使用RAM的所有局部變量(在函數中聲明),而不是使用寄存器;以正確調試應用程序。

我該怎麼辦?

編輯更多信息

有時,在主應用程序,我得到一個錯誤,因爲從功能上一個錯誤的返回值。很少發生這種情況,我在返回指令之前放置了一個檢查點和一個斷點,但是許多變量使用相同的寄存器,並且在發生錯誤時我無法清楚地瞭解情況。如果我在程序開始處移動程序計數器並逐步執行,結果是正確的。可能是寄存器的管理有問題,我想知道它是什麼。

預先感謝您的問候。

+0

是不是簡單地把調試開關打開工作?試試'volatile'關鍵字。 – Matt

+2

XY問題。沒有必要將所有當地人存儲在RAM中以進行適當的調試(並且這對於操作員來說將如何工作?)。它也會大幅減慢你的代碼。 – Olaf

+0

有時,在主應用程序中,由於函數的返回值錯誤,我得到一個錯誤。很少發生這種情況,我在返回指令之前放置了一個檢查點和一個斷點,但是許多變量使用相同的寄存器,並且在發生錯誤時我無法清楚地瞭解情況。 如果我在功能開始處移動程序計數器並逐步執行,結果是正確的。可能是寄存器的管理有問題,我想知道它是什麼。 –

回答

1

的正常方式用於調試目的這樣做是一樣的東西

#ifdef DEBUG_RELEASE 
    volatile uint8_t x; 
#else 
    uint8_t x; 
#endif 

當完成調試,您可以刪除所有的編譯器開關。但是它們很好,所以你不會遺漏任何調試代碼(非常常見的問題)。

在大多數編譯器上,上述內容足以將變量強制到RAM位置。如果不是,你可以走一步還是:

volatile uint8_t x; 
    volatile uint8_t* dummy = &x; 

現在必須在RAM中得到分配,因爲使用x其地址。

注意:如果您使用的是Codewarrior編譯器,它帶有各種版本,默認情況下啓用了優化。您可能必須手動禁用各種優化以進行調試。

+0

感謝您的回答,優化級別已設爲0.我會盡快嘗試您的解決方案。 –

相關問題