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.

TMS320F280049C: cmd配置

Part Number: TMS320F280049C

我在查阅代码时发现

memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);

这个函数是把flash的代码复制到ram执行,我也看到了cmd里面又对应的代码:

.TI.ramfunc : LOAD = FLASH_BANK0_SEC1,
RUN = RAMLS0,
LOAD_START(RamfuncsLoadStart),
LOAD_SIZE(RamfuncsLoadSize),
LOAD_END(RamfuncsLoadEnd),
RUN_START(RamfuncsRunStart),
RUN_SIZE(RamfuncsRunSize),
RUN_END(RamfuncsRunEnd),
PAGE = 0, ALIGN(4)

但是我有个疑惑,这里面的的RamfuncsRunStart从未在任何文件中使用,只是声明了。请问在编译的时候是怎么获得函数的起始地址的呢?

  • 你好,这个函数的问题我在英文E2E上咨询了一下,你可以参考一下那边的回复:e2e.ti.com/.../tms320f280049-introduction-to-memcpy-function

  • 您好,我仔细看了连接中的文档,对CMD认识更加深刻了,但是我还是不明白

    memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);

    这个函数的用法,如果说是把函数的起始地址等给到cmd中定义的段如:

    .TI.ramfunc : LOAD = FLASH_BANK0_SEC1,
    RUN = RAMLS0,
    LOAD_START(RamfuncsLoadStart),
    LOAD_SIZE(RamfuncsLoadSize),
    LOAD_END(RamfuncsLoadEnd),
    RUN_START(RamfuncsRunStart),
    RUN_SIZE(RamfuncsRunSize),
    RUN_END(RamfuncsRunEnd),
    PAGE = 0, ALIGN(4)

    但是我并没有指定哪些函数要传入这个段,我只看到在初始化函数中调用了memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);这个函数...

    另我还有个问题:在cmd中这段代码

    #if defined(__TI_EABI__)
    .TI.ramfunc : LOAD = FLASH_BANK0_SEC1,
    RUN = RAMLS0,
    LOAD_START(RamfuncsLoadStart),
    LOAD_SIZE(RamfuncsLoadSize),
    LOAD_END(RamfuncsLoadEnd),
    RUN_START(RamfuncsRunStart),
    RUN_SIZE(RamfuncsRunSize),
    RUN_END(RamfuncsRunEnd),
    PAGE = 0, ALIGN(4)
    #else
    .TI.ramfunc : LOAD = FLASH_BANK0_SEC1,
    RUN = RAMLS0,
    LOAD_START(_RamfuncsLoadStart),
    LOAD_SIZE(_RamfuncsLoadSize),
    LOAD_END(_RamfuncsLoadEnd),
    RUN_START(_RamfuncsRunStart),
    RUN_SIZE(_RamfuncsRunSize),
    RUN_END(_RamfuncsRunEnd),
    PAGE = 0, ALIGN(4)
    #endif

    我并没有看到有任何函数定义__TI_EABI__,是不是在ccs中选这个选项来决定的?

    您好,我仔细看了连接中的文档,对CMD认识更加深刻了,但是我还是不明白

    memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);

    这个函数的用法,如果说是把函数的起始地址等给到cmd中定义的段如:

    .TI.ramfunc : LOAD = FLASH_BANK0_SEC1,
    RUN = RAMLS0,
    LOAD_START(RamfuncsLoadStart),
    LOAD_SIZE(RamfuncsLoadSize),
    LOAD_END(RamfuncsLoadEnd),
    RUN_START(RamfuncsRunStart),
    RUN_SIZE(RamfuncsRunSize),
    RUN_END(RamfuncsRunEnd),
    PAGE = 0, ALIGN(4)

    但是我并没有指定哪些函数要传入这个段,我只看到在初始化函数中调用了memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);这个函数...

    另我还有个问题:在cmd中这段代码

    #if defined(__TI_EABI__)
    .TI.ramfunc : LOAD = FLASH_BANK0_SEC1,
    RUN = RAMLS0,
    LOAD_START(RamfuncsLoadStart),
    LOAD_SIZE(RamfuncsLoadSize),
    LOAD_END(RamfuncsLoadEnd),
    RUN_START(RamfuncsRunStart),
    RUN_SIZE(RamfuncsRunSize),
    RUN_END(RamfuncsRunEnd),
    PAGE = 0, ALIGN(4)
    #else
    .TI.ramfunc : LOAD = FLASH_BANK0_SEC1,
    RUN = RAMLS0,
    LOAD_START(_RamfuncsLoadStart),
    LOAD_SIZE(_RamfuncsLoadSize),
    LOAD_END(_RamfuncsLoadEnd),
    RUN_START(_RamfuncsRunStart),
    RUN_SIZE(_RamfuncsRunSize),
    RUN_END(_RamfuncsRunEnd),
    PAGE = 0, ALIGN(4)
    #endif

    我并没有看到有任何函数定义__TI_EABI__,是不是在ccs中选这个选项来决定的?

    您好,我仔细看了连接中的文档,对CMD认识更加深刻了,但是我还是不明白

    memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);

    这个函数的用法,如果说是把函数的起始地址等给到cmd中定义的段如:

    .TI.ramfunc : LOAD = FLASH_BANK0_SEC1,
    RUN = RAMLS0,
    LOAD_START(RamfuncsLoadStart),
    LOAD_SIZE(RamfuncsLoadSize),
    LOAD_END(RamfuncsLoadEnd),
    RUN_START(RamfuncsRunStart),
    RUN_SIZE(RamfuncsRunSize),
    RUN_END(RamfuncsRunEnd),
    PAGE = 0, ALIGN(4)

    但是我并没有指定哪些函数要传入这个段,我只看到在初始化函数中调用了memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);这个函数...

    另我还有个问题:在cmd中这段代码

    #if defined(__TI_EABI__)
    .TI.ramfunc : LOAD = FLASH_BANK0_SEC1,
    RUN = RAMLS0,
    LOAD_START(RamfuncsLoadStart),
    LOAD_SIZE(RamfuncsLoadSize),
    LOAD_END(RamfuncsLoadEnd),
    RUN_START(RamfuncsRunStart),
    RUN_SIZE(RamfuncsRunSize),
    RUN_END(RamfuncsRunEnd),
    PAGE = 0, ALIGN(4)
    #else
    .TI.ramfunc : LOAD = FLASH_BANK0_SEC1,
    RUN = RAMLS0,
    LOAD_START(_RamfuncsLoadStart),
    LOAD_SIZE(_RamfuncsLoadSize),
    LOAD_END(_RamfuncsLoadEnd),
    RUN_START(_RamfuncsRunStart),
    RUN_SIZE(_RamfuncsRunSize),
    RUN_END(_RamfuncsRunEnd),
    PAGE = 0, ALIGN(4)
    #endif

    我并没有看到有任何函数定义__TI_EABI__,是不是在ccs中选这个选项来决定的?

  • 问题有点多,好像有重复的内容?

    1、一般会在程序里定义一个段,类似:#pragma CODE_SECTION(Timer0IntIsr, ".TI.ramfunc");就是将Timer0IntIsr内的程序从flash搬移到ram,你可以看一下这个帖子,介绍具体复制什么内容到ram的:https://e2echina.ti.com/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/208434/faq-tms320f280049-c-ram?tisearch=e2e-sitesearch&keymatch=.TI.ramfunc#

    2、__TI_EABI__是对工程格式的预定义,新建工程的时候是什么格式就会运行到对应格式的预定义下。这边有个文档可以参考一下:https://e2echina.ti.com/support/microcontrollers/msp430/f/msp-low-power-microcontroller-forum/200006/faq-ti?tisearch=e2e-sitesearch&keymatch=%2522EABI%2522#

  • 非常谢谢您,我的疑惑已经完全解开了!

  • 感谢你的认可