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从未在任何文件中使用,只是声明了。请问在编译的时候是怎么获得函数的起始地址的呢?
Green Deng:
你好,这个函数的问题我在英文E2E上咨询了一下,你可以参考一下那边的回复:e2e.ti.com/…/tms320f280049-introduction-to-memcpy-function
,
user6057760:
您好,我仔细看了连接中的文档,对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中选这个选项来决定的?
,
Green Deng:
问题有点多,好像有重复的内容?
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#
,
user6057760:
非常谢谢您,我的疑惑已经完全解开了!
,
Green Deng:
感谢你的认可