将ARM CM3编程为ROM&内存

时间:2014-04-06 11:25:42

标签: arm ram rom lpc codesourcery

目前,我正在努力将我的业余时间项目升级为使用ARM而不是Microchip的8位微处理器。

但不幸的是我遇到了一些问题:

我真的不明白编程方式的不同之处: - 编程到ROM中 - 编程到RAM(在我的情况下只有32K)

我已经使用IAR IDE进行了一些“hello world”测试,其中编译/编程是使用我不担心的给定配置完成的。但是我不喜欢IAR IDE和IAR编译器的32K限制所以我决定建立一个新环境(参见下面的配置)。

在设置Eclipse环境之后,使用IAR提供的示例我设法将ARM编程到RAM中。但是,当我想将ARM编程为ROM时,该程序似乎没有做任何事情。我使用了示例makefile,我相信它做了某种映射到ROM或RAM,我只需要每次定义其中一个。

我知道ROM是只读存储器,在电源断开且RAM速度较快之后不会为空,但每次都需要将程序下载到ARM。

我是否需要将我的程序分配到ROM和RAM的部分,或者我可以将所有内容编程到ROM中,以便ARM在上电时将代码重新映射到RAM中?

目前我使用以下配置:

  • Codesourcery GCC
  • Eclipse C / C ++
  • Segger Jlink程序员(GDB服务器)
  • CMSIS或LPCOpen库(尚未完全正常工作)
  • 恩智浦LPC1766 Cortex M3
  • Windows 8 64位
  • LPC1768和CMSIS的IAR示例
  • 来自恩智浦的
  • 示例:lpc17xx.cmsis.driver.library

有人可以帮我理解ROM和RAM的不同用途,以及如何设置我的编译器/ makefile以利用ROM和RAM内存。

最后,我希望能够将ARM(我认为)编程到ROM中,以便我可以关闭ARM,而无需每次都重新编程。

1 个答案:

答案 0 :(得分: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

我将重置和中断向量放在它们自己的部分中,并强制链接器将它们放在可执行代码的最开头。