2014-04-06 55 views
1

目前我正在將我的空閒時間項目升級爲使用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而不必每次重新編程它。

回答

1

我認爲您需要查看示例中提供的鏈接器映射文件。這些文件將有一個.ld擴展名,通常您會在文件名中看到字母RAMROMFlash。鏈接器文件只是一個文本文件,所以您可以在Eclipse編輯器中檢查它。重要的部分是.text部分位於ROM中。

GDB的啓動程序也會有一個與之關聯的啓動腳本。您可以在啓動GDB的相同Eclipse菜單項下使用Configure...選項來編輯它。腳本需要用線來結束像

monitor flash device = LPC1343 
monitor flash download = 1 

在GDB的monitor命令發送行至GDB服務器的其餘部分。 JLink GDB服務器手冊中介紹了flash命令。

編輯:.text部分是鏈接器爲可執行代碼使用的默認部分。在我gcc_arm.ld文件我有這樣的:

SECTIONS 
{ 
    .text : 
    { 
     KEEP(*(.isr_vector)) 
     *(.text*) 

    } > FLASH 

我把復位並在自己的部分中斷向量和強制鏈接把那些在可執行代碼的開始。

+0

我看着不同的.ld文件,它們的文件中有ROM或RAM,就像你期待的那樣。我可以看到,在這些文件中,ARM內存映射中的ROM/RAM的開始和結束位置被配置。 我也有我的調試配置設置與以下GDB命令: 週一轉速4000 週一端小 週一閃存下載= 1個 週一閃存設備= LPC1766 週一復位1個 只有部分的.text我能」在我的.LD文件中找到?這個.text的功能是什麼? 非常感謝! – Futience

+0

我開始瞭解ROM和RAM中不同位置的映射。 .text保存所有的代碼,並且如果我是對的,它將永遠保存在ROM中。代碼使用的變量將從RAM內存的開始處開始,或者在鏈接器文件中配置的指定位置開始。我並不完全理解鏈接器文件中使用的sytax,但我想我會及時發現它。 – Futience