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万D:TMS320F2.8377万D

Guru**** 2535360 points
Other Parts Discussed in Thread: CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/653129/tms320f28377d-tms320f28377d

部件号:TMS320F2.8377万D
主题:controlSUITE中讨论的其他部件

你(们)好
我编写了运行在TMS320F2837xD上的C2000项目。 该项目是从以下示例中开发的:linky_CPU1。  我通过RAM中的JTAG运行程序,测量计算的持续时间,然后将配置更改为闪存,因为应用程序最终将从闪存中运行。 持续时间需要更多时间(6到8倍!) 我查找了有关如何加载到闪存和从RAM运行的信息,然后感到困惑。 我有几个问题:
1. 我是否可以将项目更改为DSP/BIOS配置? 这可能是解决问题最简单的方法吗?
2. 为了将功能复制到“ramfuncs”部分,我到底应该怎么做? 在链接程序命令文件或/和代码中。 我使用2837xD_FLASH_lnk_CPU1.cmd文件。 我的代码是用C/C++编写的。
3. 如果函数调用其他函数,则所有函数都应移动到RAM,否则链接程序将自动执行此操作?
4. 我需要与我的微处理器TMS320F2837xD相匹配的示例。
谢谢。

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

    您好,Gregory:

    将代码移动到闪存不应使代码执行速度降低6-8倍。 在您的案例中,闪存看起来没有正确设置,它仍在以默认等待状态运行。 我们拥有controlSUITE中的所有示例以及构建配置"flash",因此您可以参考它们。 从CCS中的controlSUITE导入示例,并将构建配置更改为flash,然后检查项目设置。 此外,您不必将所有功能从闪存复制到RAM。 只需从闪存复制闪存初始化,并在InitSysCtrl函数中进行处理(如下所示)-

    -----------------

    #ifdef _flash
    //
    //将时间关键代码和闪存设置代码复制到RAM。 这包括
    //以下函数:InitFlash()
    //
    // RamfuncsLoadStart,RamfuncsLoadSize和RamfuncsRunStart
    //符号由链接器创建。 请参阅设备.cmd文件。
    //
    memcpy (&RamfuncsRunStart,&RamfuncsLoadStart,(size_t)&RamfuncsLoadSize);

    //
    //呼叫闪存初始化以设置闪存等待。 此功能必须
    //驻留在RAM中。
    //
    InitFlash();
    #endif

    ———

    但您需要在项目中预先定义"_FLASE"才能运行,我认为您的项目中可能缺少了该项。

    此致,

    Vivek Singh

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

    非常感谢 Vivek Singh。 我添加 了"_flash"作为预定义符号,这解决了我的问题。

    也许您可以帮助解决另一个问题? 我对这一方向还不是很满意。 在RAM中运行(i++<1000)需要1毫秒以上。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能告诉周期数。 另外,在汇编这一行代码时,您还会看到多少个指令?

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

    您好,Vivek。

    很抱歉耽误你的时间。

    C: while (I++<100)中的代码;汇编中的4行需要100微元以上。

           C$L17:

    00c28a:  9249       MOV         AL,*-SP[9]
    00c28b:  0A49       INC         *-SP[9]
    00c28c:  5264       CMBB        AL,#0x64
    00c28d:  64FD       SB          C$L17,LT

    谢谢,Gregory。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Gregory,如上一篇文章中所述,请说明执行循环的CPU周期数。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Vivek,我不知道有多少CPU周期会执行循环,但在组装过程中,这一行代码(I++<100)会执行4个指令:MOV,INC,CMBB,SB。 如果每个指令执行1个周期,则应为4个周期。 系统时钟为200 MHz。 我测量每个回路1微秒。 出现问题。

    00c28a:9249 MOV AL,*-SP[9]
    00c28b:0A49 包括 *-SP[9]
    00c28c:5264 CMBB AL,#0x64
    00c28d:64fd. Sb C$L17,LT
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Gregory:

    很抱歉回复太晚。 您是否检查过在执行此代码时没有发生中断? 此外,当您逐步执行代码时,您会看到每个指令对应多少个周期?

    Vivek Singh