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.

[参考译文] TMS320F28386D:如何判断代码段是在 RAM 中还是在闪存中

Guru**** 2454490 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1159629/tms320f28386d-how-to-tell-if-code-section-is-in-ram-or-flash

器件型号:TMS320F28386D

大家好、我已经创建了一个 FLASH_CMD 链接器文件。 最后、我有这个。

.TI.ramfunc:{}负载= FLASH1 | FLASH4,
  运行= RAMGS0 | RAMGS1 | RAMGS2 | RAMGS3 | RAMGS4 | RAMGS5 | RAMGS6
  等等...

这意味着、在 Device_Init 期间、加载后列出的闪存段将是运行后列出的 RAM 段的 memcpy。 只要我在 FLASH1或 FLASH4中有.text、它就会被复制到 RAM 中并从 RAM 中运行。 是这样吗?

在代码中、我具有:

#pragma CODE_SECTION (motor1ControlISR、".TI.ramfunc");

我可以从映射文件中看到、此函数位于 RAM 部分。 但所有其他函数都位于闪存部分。 如果我的回答是正确的、那么我根本不需要这个#pragma。 但是、如果是这种情况、我如何判断我的函数是从 RAM 还是闪存运行?

我是否仍然需要此#pragma 用于 RAM 中的所有函数?

谢谢

Ken

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

    您好 Ken、

    默认情况下、所有代码都转至".text"段。

    [引用 userid="494122" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1159629/tms320f28386d-how-to-tell-if-code-section-is-in-ram-or-flash ].TI.ramfunc:{} load = FLASH1 | FLASH4,
      运行= RAMGS0 | RAMGS1 | RAMGS2 | RAMGS3 | RAMGS4 | RAMGS5 | RAMGS6[/QUEST]

    链接器文件的上述部分显示".TI.ramfunc"段将从 RAM 运行并从闪存加载。
    它没有说明函数代码默认转至何处。

     pragma CODE_SECTION ()用于指示将此特定函数放置在 指定段中(如果指定了运行段-在程序初始化时从闪存复制到 RAM)。 对于每个函数、这必须单独完成。

    有一个特殊的编译器选项"--ramfunc=on"(您可以在"C2000 Compiler -> Advanced Options -> Runtime Model Options "下找到它)、设置后、所有函 数都从 RAM 运行(即".TI.ramfunc"部分)。 如果您的代码适合 RAM、则可以使用它。 除此之外,您还必须使用  #pragma CODE_SECTION ()选择从 RAM 运行哪些函数。

    此致、
    Andy