2014-03-26 38 views
1

我正在使用Keil MDK-ARM編譯器開發嵌入式項目。我嘗試訪問外部存儲器堆,但是當我下載我的程序在我的微型(微是lpc1788)完成下載後崩潰(沒有啓動主函數)在startup.c文件,雖然我可以訪問外部存儲器(在增加堆部分之前)。如何作爲堆訪問外部存儲器

現在任何人都可以提供一個小樣本項目如何配置uVision,使用外部RAM作爲堆?我想配置uVision在內部FLASH中使用STACK和HEAP的內部和外部RAM來執行程序。

回答

3

首先在項目中指定RAM1(例如)的外部RAM範圍目標設置對話框,並確保所有其他設置適合您的項目。

然後在鏈接設置選項卡「從目標對話框使用存儲佈局」選項取消選中。這將允許您手動編輯分散文件,該文件最初將反映目標設置中定義的佈局。

編輯分散文件從而建立在外部RAM中的部分(例如):

RW_RAM1 0x60000000 UNINIT 0x00040000 { ; RW data 
    *(HEAP) ; external SRAM 
    } 

實際地址可能差異,一部分。如果你要使用堆所有外部RAM,如果你想允許鏈接放置其他數據在這個空間則足以,:

RW_RAM1 0x60000000 UNINIT 0x00040000 { ; RW data 
    *(HEAP) ; external SRAM 
    .ANY (+RW +ZI) 
    } 

檢查映射文件的HEAP部分,以驗證該空間按需要分配。

如果需要,您可以同樣重新定位堆棧。但請注意,外部內存訪問可能比內部慢,因此可能會影響性能。

這一切都假設你已經正確地初始化了外部RAM控制器以匹配外部RAM設備 - 這應該在system_lpc1788.c中完成(或者爲你的啓動代碼命名的類似文件 - 我的經驗是STM32所以我不知道,也許system_lpc17xx.c)

+0

@aria nikan:我簡化了我的解決方案。您不再需要修改啓動文件。 – Clifford