【问题标题】:Programming ARM CM3 into ROM & RAM将 ARM CM3 编程到 ROM 和 RAM
【发布时间】:2014-04-06 11:25:42
【问题描述】:

目前我正在着手将我的业余项目升级为使用 ARM 而不是 Microchip 的 8 位微控制器。

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

我不太了解编程方式的差异: - 编程到 ROM - 编程到 RAM(在我的情况下只有 32K)

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

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

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

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

目前我正在使用以下配置:

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

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

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

【问题讨论】:

    标签: arm ram rom lpc codesourcery


    【解决方案1】:

    我认为您需要查看示例中提供的链接器映射文件。这些文件将具有.ld 扩展名,您通常会在文件名中看到字母RAMROMFlash。链接器文件只是一个文本文件,因此您可以在 Eclipse 编辑器中检查它。重要的部分是.text 部分位于ROM 中。

    GDB 的启动器也会有一个与之关联的启动脚本。您可以使用启动 GDB 的同一 Eclipse 菜单项下的Configure... 选项来编辑它。脚本需要以如下行结束

    monitor flash device = LPC1343
    monitor flash download = 1
    

    GDB 中的monitor 命令将剩余的行发送到 GDB 服务器。 flash 命令在 JLink GDB 服务器手册中有解释。

    编辑:.text 部分是链接器用于可执行代码的默认部分。在我的gcc_arm.ld 文件中,我有这个:

    SECTIONS
    {
        .text :
        {
            KEEP(*(.isr_vector))
            *(.text*)
    
        } > FLASH
    

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

    【讨论】:

    • 我查看了不同的 .ld 文件,它们的文件中包含您所期望的 ROM 或 RAM。我可以看到在这些文件中配置了 ARM 内存映射中 ROM / RAM 的开始和结束位置。我还使用以下 GDB 命令设置了调试配置: mon speed 4000 mon endian little mon flash download = 1 mon flash device = LPC1766 mon reset 1 只有我在 .LD 文件中找不到的 .text 部分?这个.text的功能是什么?非常感谢!
    • 我开始了解ROM和RAM中不同位置的映射。 .text 包含所有代码,如果我是对的,它将始终放在 ROM 中。当在链接器文件中配置时,代码使用的变量将从 RAM 存储器的开头或指定位置开始。我不完全理解链接器文件中使用的语法,但我想我会及时弄清楚的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 2018-04-08
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    相关资源
    最近更新 更多