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.

[参考译文] TM4C1290NCPDT:从 RAM 运行函数

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1134269/tm4c1290ncpdt-run-functions-from-ram

器件型号:TM4C1290NCPDT

Hallo、

任何人能否为.TI.ramfuncs 提供正确的链接器 cmd 文件、或者是否正确:

#ifdef __TI_Compiler_version__
  #if __TI_Compiler_version__>=15009000
   .TI.ramfunc:{}> SRAM
  其他
   ramfuncs   :> SRAM
  #endif
#endif

谢谢

此致

Steffen

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

    您好!

     我认为您使用该指令时就好像 TM4C129是基于 RAM 的器件一样。 TM4C129是一款基于闪存的器  件、有关详细信息、请参阅 TI 汇编语言工具用户指南 www.ti.com/.../SPNU118U。 我已粘贴以下说明。  

    8.5.5.2.1示例:将函数放置在 RAM 中
    -ramfunc 编译器选项和 ramfunc 函数属性允许编译器指定函数
    放置在 RAM 中并从 RAM 中执行。 大多数较新的 TI 链接器命令文件都支持 ramfunc
    选项和函数属性、方法是将此类函数放置在.TI.ramfunc 段中。 如果您看到链接器错误
    与此段相关、您应将.TI.ramfunc 段添加到您的 SECTIONS 指令中、如下所示。 在中
    这些示例、RAM 和闪存是 RAM 和闪存存储器的存储器区域的名称;
    链接器命令文件中的名称可能不同。


    对于基于 RAM 的器件:
    .TI.ramfunc:{}> RAM


    对于基于闪存的器件:
    .TI.ramfunc:{} load=flash,run=RAM,table (BINIT)

    下面的这一条也将有用。 如果您仍有疑问、我会将您的问题转发给我们的编译器/汇编器工具专家。

    https://e2e.ti.com/blogs_/archives/b/toolsinsider/posts/helpful-tips-executing-code-from-ram

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

    您好、Charles、

    感谢您的反馈。 您的解决方案不完全正确。 您必须添加 binit 部分:

     binit:{}> FLASH

    RAM func 部分如下所示:

    .TI.ramfunc:{} load=flash,run=SRAM,table (BINIT)

    然后是它的工作

    此致

    Steffen

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

    我的完整链接器 cmd:

    /*********
     *
     *德州仪器 TM4C1290NCPDT 的默认链接器命令文件
     *
     *这是从 TivaWare 库的修订版15071衍生而来的。
     *
     (小部分 /

    --retain=g_pfnVectors

    存储器

       闪存(RX):origin = 0x00000000,length = 0x00100000
       SRAM (rwx):origin = 0x20000000,length = 0x00040000


    /*以下命令行选项作为 CCS 项目的一部分进行设置。    *
    /*如果您使用命令行构建,或者出于某种原因想要   */
    /*在此处定义它们,您可以根据需要取消注释并修改这些行。     *
    /*如果您使用 CCS 进行构建、最好进行任何这样的构建*/
    /*对 CCS 项目进行修改并将此文件保留为单独文件。              *
    /*                                                                          *//
    /*--heap_size=0                                                            */
    /*--stack_size=256                                                         */
    /*--library=rtsv7M4_T_le_eabi.lib                                          */

    /*内存中的段分配*/

    部分

       .intvecs  :> 0x00000000
       .text  :  > FLASH
       .const :  > FLASH
       .cinit :  >闪存
       .pinit :  > FLASH
       binit:{}> FLASH
       init_array:> FLASH

       .vtable  :>0x20000000
       .data  :  > SRAM
       .bss   :  > SRAM
       .sysmem  :> SRAM
       .stack :  > SRAM

       .TI.ramfunc:{} load=flash,run=SRAM,table (BINIT)


    __STACK_TOP =__STACK + 512;