目前我正在將我的空閒時間項目升級爲使用ARM而不是Microchip的8位微處理器。將ARM CM3編程到ROM和RAM中
但不幸的是我遇到了一些問題:
我真的不明白編程方式的差異: -
編程到RAM(這是隻有32K在我的情況) - 編程到ROM我已經用IAR IDE做了一些「hello world」測試,其中編譯/編程是使用我不擔心的給定配置完成的。但是我不喜歡IAR IDE和IAR編譯器的32K限制,因此我決定設置一個新的環境(請參閱下面的配置)。
設置Eclipse環境後,使用IAR提供的示例,我設法將ARM編程到RAM中。但是,當我想將ARM編程爲ROM時,該程序似乎沒有任何作用。我使用了一些makefile,我相信這些makefile可以映射到ROM或RAM,我只需要每次定義其中的一個。
我知道ROM是隻讀存儲器,在電源斷開後RAM不會變空,而且RAM速度更快,但需要每次將程序下載到ARM。
我是否需要將我的程序劃分爲ROM和RAM的部分,或者我可以將所有程序都編程到ROM,以便ARM在啓動時將代碼重新映射到RAM中?
目前我使用了以下配置:
- CodeSourcery的GCC
- Eclipse的C/C++
- 套件含有Segger JLINK程序員(GDB服務器)
- CMSIS或LPCOpen庫(沒有完全工作尚未)
- 恩智浦LPC1766 Cortex M3
- Windows 8 64位
- 個IAR例子爲LPC1768和CMSIS從NXP
- 例子:lpc17xx.cmsis.driver.library
可能有人請幫助我瞭解ROM和RAM,以及如何的不同用途我應該設置我的編譯器/生成文件使用ROM和RAM存儲器。
最後,我希望能夠將ARM(我認爲)編程到ROM中,以便可以關閉ARM而不必每次重新編程它。
我看着不同的.ld文件,它們的文件中有ROM或RAM,就像你期待的那樣。我可以看到,在這些文件中,ARM內存映射中的ROM/RAM的開始和結束位置被配置。 我也有我的調試配置設置與以下GDB命令: 週一轉速4000 週一端小 週一閃存下載= 1個 週一閃存設備= LPC1766 週一復位1個 只有部分的.text我能」在我的.LD文件中找到?這個.text的功能是什麼? 非常感謝! – Futience
我開始瞭解ROM和RAM中不同位置的映射。 .text保存所有的代碼,並且如果我是對的,它將永遠保存在ROM中。代碼使用的變量將從RAM內存的開始處開始,或者在鏈接器文件中配置的指定位置開始。我並不完全理解鏈接器文件中使用的sytax,但我想我會及時發現它。 – Futience