This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RM57L843:从 RAM 或闪存执行指令

Guru**** 1790830 points
Other Parts Discussed in Thread: RM57L843
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/568772/rm57l843-instruction-execution-from-ram-or-flash

器件型号:RM57L843

您好!

我从上个月开始使用 RM57L843器件。我有一个基本的疑问。

根据我的知识和器件的参考手册、RM57L843器件上电后开始从复位矢量所在的0x00000闪存位置执行。

是否可以从 RAM 位置运行应用程序、比如引导加载程序?

在调试模式下(执行断点单步执行)、应用程序加载到闪存或 RAM 中?

谢谢、此致、

Praveen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Praveen、

    无法将矢量表重定位到始终映射到闪存的0x00000000以外的地址。
    (此设备没有 MMU 或虚拟内存)。

    CPU 支持 HIVECS 模式、在该模式下、它可以将矢量表重定位到0xFFFFFF0000、但您无法使用该模式
    因为它映射到用于外设而非存储器的某个地址范围。

    可以直接将大部分 IRQ ISR 映射到 RAM、绕过闪存、因为在矢量 IRQ 模式下、CPU 绕过地址0x00000018并直接跳转到 VIM 提供的地址。 但您仍然需要地址为0x00的向量表,对于其他异常,CPU 只接受矢量 IRQ。

    始终可以将某些程序加载到 RAM 中并在调试控制下执行、实际上 CCS 使用的闪存编程算法会在后台执行此操作、而无需您了解[它们会先保存、然后再恢复 RAM 内容、这样您就不会看到该过程]。 但是、除非连接了调试器、否则这不会有用。

    产品文件夹的应用手册部分中提供了 Hercules 的引导加载程序示例。 引导加载程序会从地址0x00000000处的异常向量执行某种次要分支、然后到可以在引导加载程序上面的扇区中创建的另一个向量表。 这很棘手、我们遇到了很多人使用这种方法时遇到了问题、但它可以起作用。

    在 RM57L 上、请注意器件是基于缓存的、并且 I$和 D$是单独的。 当您将代码从闪存复制到 RAM 时、它将作为"数据"传输完成、因此以下操作非常重要: a)确保您清除 D$或使用写通模式、以便您复制的程序实际写入 L2SRAM、而不仅仅是存储在不干净的缓存行中。 b)刷新 I$、使其在该地址处没有过时的数据副本。 要重新映射:没有任何类型的硬件可以使 L1I$和 L1D$保持一致、因此当在'code'上运行时(如执行 memcpy())、您必须在 SW 中处理此一致性问题...

    -Anthony