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.

[参考译文] TMDS570LS31HDK:将.text 文件从闪存更改为 RAM

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1393638/tmds570ls31hdk-text-file-from-flash-to-ram

器件型号:TMDS570LS31HDK

工具与软件:

您好、E2E 专家、

你好。

关于如何将 .text 从闪存复制到 RAM、是否有相关指南?

我使用 TMS570LS31371HDK、并想将.text 从闪存复制到 RAM、因为 RAM 的工作速度非常快。

我查看了下面的 E2E 主题。

CCS/TMS570LS3137:将代码从闪存复制到 RAM

但是、它不起作用。  

我的代码停止为 undefEntry。  
我的链接器文件;
小程序
  向量(X) :origin=0x00000000 length=0x00000100
  FLASH0 (RX):origin=0x00000100 length=0x0017FF00
  FLASH1 (RX):origin=0x00180000 length=0x00180000
  堆栈 (RW):origin=0x08000000 length=0x00001500
  RAM  (XRW):origin=0x08001500 length=0x0003EB00
/*用户代码 begin (2)*/
/*用户代码结束*/
}
/*用户代码 begin (3)*/
/*用户代码结束*/
/*------------------ */
/*部分配置                            */
部分中)
  .intvecs :{}>向量
  .text  :run = RAM、load = FLASH0 | FLASH1
         load_start (flashStart)、load_end (flashEnd)、load_size (flashSize)、
         RUN_START (ramStartAddr)、RUN_END (ramEndAddr)
  //{}> RAM
  .const :{}> FLASH0 | FLASH1.
  .cinit :{}> FLASH0 | FLASH1.
  .pinit :{}> FLASH0 | FLASH1.
  .bss  :{}>RAM.
  .data  :{}>RAM.
.sysmem :{}> RAM.
/*用户代码 begin (4)*/
 
/*用户代码结束*/
}
我从 flash 复制到 ram();
 memcpy (&ramStartAddr、&flashStart、(uint32)&flashSize);
此致、
TI-CSC
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的  TI-CSC:

    根据我的理解、我们无法将整个文本部分保存到 RAM 中、因为在某种情况下、我们应该需要调用例程来将闪存文本数据复制到 RAM 中。这个复制例程应该位于闪存中、因为在不调用此例程的情况下、RAM 中的代码会是怎样的。

    所以、我的想法是我们应保留.text 段、直到这个复制到 RAM 例程中的内容只在闪存中、因此、在这之后、我们可将代码从闪存复制到 RAM 中。

    我为此创建了一个示例工程:

    e2e.ti.com/.../TEXT_5F00_Section_5F00_Executing_5F00_RAM_5F00_LS3137.zip

    我将解释我在该项目中所做的工作:

    1、这里我将创建一个新的部分、名为 MAIN_CODE_SECTION、

    2.想法是将我的所有主代码保留在这个部分中、而 main 之前的所有代码将像以前一样出现在.text 部分中。

    3.现在在调用 main 例程之前、我会将主例程代码从闪存复制到 RAM 中、如下所示。

    4.一旦我们将数据从闪存复制到 RAM 中、现在我们可以调用 main 例程来将剩余的代码执行到 RAM 中而不是闪存中。

    注意:
    如果我们尝试将整个.text 放入 RAM、则会出现 中止异常 、因为在 POR 后、RAM 将为空、在我们手动复制数据之前、RAM 中将没有代码。 因此、如果我们尝试在复制之前从 RAM 运行.text 段、显然会出现一些无效的指令、而这会导致出现异常。

    ——
    谢谢、此致、
    Jagadish。

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

    您好 Jagadish、

    你好。

    我的代码现在运行正常、一切都正常。

    我开始调试、我的程序启动了、但我无法以任何方式将其停止。 我的代码运行得非常好、我对它没有问题、我唯一的问题是我无法在调试期间停止它。

    问题可能是什么?

    此致、

    TI-CSC

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

    尊敬的 TI-CSC:

    您是否可以尝试以下步骤:

    1.正确无误;进入调试过程后、无法看到暂停选项、并且代码不会在 main.c 起始处停止

    这可能是因为我们会将整个代码移至 RAM 中而不是闪存中。 这可能会阻止、但我们可以做一件简单的事情:

    2.转到"Debug"选项卡、然后选择"Texas Instruments XDS1xx USB Debug Probe"

    3.一旦您选择它,它应该会启用暂停选项

    4.现在如果您暂停代码、可以看到执行的位置:

    5.如果要再次开始调试工程、请点击"System Reset"选项、如下所示:

    6.这会将代码带到重置条目

    然后、您可以再次正常执行代码

    ——
    谢谢、此致、
    Jagadish。