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.

[参考译文] TMS320F280039:从 RAM 运行未提高速度

Guru**** 2394305 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1312562/tms320f280039-running-from-ram-not-improving-speed

器件型号:TMS320F280039
主题中讨论的其他器件:C2000WARE

它是一个三相逆变器应用。

在 pwm1中断中执行主控制循环。

#pragma code_section (EPWM_INV_ISR、"ramfuncs");//用于将 ISR 放置到 RAM

//#pragma CODE_SECTION (EPWM_INV_ISR、".TI.ramfunc");//也尝试过、结果相同

当下载到 RAM 时(无闪存调试)、该函数需要~20us。 //F280039_ram_lnk、cmd

通过在进入时驱动 GPIO 引脚和在退出时复位来完成的时间测量。  

使用闪存时、仍然在从 RAM 运行 ISR 时、花费25uS、大不相同。

从链接器 CMD 获取。

#else //使用 COFF
.TI.ramfunc:load = FLASH_BANK1_SEC29、
运行= RAMGS12、
Load_start (_RamfuncsLoadStart)、
Load_Size (_RamfuncsLoadSize)、
Load_End (_RamfuncsLoadEnd)、
RUN_START (_RamfuncsRunStart)、
RUN_SIZE (_RamfuncsRunSize)、
RUN_END (_RamfuncsRunEnd)、
对齐(8)
#endif

有任何帮助吗?
如何确保 ISR 只从 RAM 运行?

此致

桑迪普

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

    Sandeep、您好!

    我建议您查看这篇 E2E 文章、其中介绍了如何从闪存复制代码和从 RAM 运行。

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/878674/faq-flash---how-to-modify-an-application-from-ram-configuration-to-flash-configuration

    我想确认您使用的是 c2000Ware 中提供的闪存链接器命令文件和 device.c、device.h 和 driverlib.h。  

    您能否确认您具有 memcpy()指令

    例如 memcpy (&RamfuncsRunStart、&RamfuncsLoadStart、(size_t)&RamfuncsLoadSize);  

    此致、

    小津野市

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

    是的、我正在使用这些文件、我的应用程序从 C2000示例开始、并添加了其他函数。
    memcy 在 sysctrl.c 中、但在 sysctrl 中没有任何更改。

    虽然我已经定义了各种函数、对于 ramfuncs、负载大小(_RamfuncsLoadSize)不是变化的、但它只是29。
    具有闪存和 RAM 地址的 Loadstart 和 RunStart 匹配。

    如果我还删除了#pragma、则 loadsize 不会更改。

     #pragma code_section (EPWM_INV_ISR、".TI.ramfunc");//用于放置

    在示例项目中使用标准 cmd 文件。

    我缺少什么?

    此致

    桑迪普

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

    发现的问题是、pragma 语句应位于与函数所在的同一文件中。

    我将所有 pragma 语句保存在 main.c 中、因此实际上什么都不做。 无警告/错误、只是忽略。

    通过将 pragma 语句移至函数代码所在的每个文件、可以对问题进行排序。

    BTW、使用 COFF 选项而非 eabi 编程。