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.

[参考译文] 编译器:TMS320F2.8377万S #pragma函数

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/580813/compiler-tms320f28377s-pragma-function

主题中讨论的其他部件:controlSUITETMS320F2.8377万S

工具/软件:TI C/C++编译器

您好,
通过320f2.8335万上的#pragma函数,我们可以通过RAM快速运行我们想要运行的函数,在上一篇文章中,我们说可以通过以下方式实现这一点:

1.我尚未找到此功能的特定文档。 然而,使用它并不是很复杂。 示例FLASH_F2.8335万 (C:\ti\controlSUITE\DEVICE_SUPPORT\F2833x\v133\DSP2833x_Examples_ccsv4)使用2833使用此功能。

在主菜单中,将代码从闪存复制到ram的功能称为:
Memcopy (&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);

您还需要指定应从RAM执行哪些功能:
#pragma code_section (epwm1_timer_isr,"ramfuncs");
#pragma code_section (epwm2_timer_isr,"ramfuncs");

ramfuncs部分需要在链接程序命令文件中创建:
ramfuncs:load = FLASHD,
RUN = RAML0,
load_start(_RamfuncsLoadStart),
load_end (_RamfuncsLoadEnd),
run_start(_RamfuncsRunStart),
页面= 0

2.避免了应用程序启动时间较长等缺点,因为需要执行memcopy,并且您还需要RAM中的可用空间。
我不知道此功能的其他关键缺点。

3.编译项目后,链接器将生成.map文件。 在此文件中列出了不同RAM和闪存区域的使用情况。
在上面提到的示例中,我可以看到ramfuncs在RAM中需要0x5d字节,并在地址0x8000的RAML0中存储和执行。
ramfuns 0.0032亿 0000005d运行ADDR = 0.8万
32万 0.0003万e example_2833xFlash.obj (ramfuncs)
3.2003万e 0.0001万b DSP2833x_sysctrl.obj (ramfuncs)
0.32万59 000000045.9万00004 DSP2833x_usDelay.obj0.0004万 DSP2833x_usDelay.obj (2833 (ramfuns)

TMS320F2.8377万s的要求是什么?

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

    您也可以在TMS320F2.8377万S中使用这些功能。

    需要注意的一点是(您可能已经注意到了TI提供的最新链接器命令文件)最新的编译器/链接器需要节名称为".TI.ramfunc"而不是"ramfuncs"。

    此外, 如果您愿意,现在可以使用"ramfunc"属性代替函数的#pragma。

    有关详细信息,请查看此Wiki文章: processors.wiki.ti.com/.../Placing_functions_in_RAM

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

    感谢您的回答,
    使用".TI.ramfunc"代替"ramfuncs"已经奏效。

    (一)上文提到的;
    Memcopy (& RamfuncsLoadStart,& RamfuncsLoadEnd,& RamfuncsRunStart);
    而是
    memcpy (& RamfuncsRunStart,& RamfuncsLoadStart,(size_t)& RamfuncsLoadSize);
    我使用了。 现在系统可以工作。 如果我按上述方式使用程序,是否可以? 是否会产生另一个问题?

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

    很高兴知道您的应用程序现在工作正常。

    可以,您可以使用memcpy()将".ti.ramfunc"部分的内容复制到RAM。 它将使用#pragma复制映射到".ti.ramfunc"部分的所有函数。

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

    Erkan,

    我现在要结束这条线。  如果您有任何其他问题,可以打开新线程。

    谢谢,此致,
    Vamsi  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢您的帮助,没有其他责任

    此致
    Erkan