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.

[参考译文] 编译器/TMS320F28379D:有关闪存编程和快速 FPU 补充的问题

Guru**** 2563960 points
Other Parts Discussed in Thread: TMS320F28335, TMS320F28379D, C2000WARE, CONTROLSUITE, SFRA

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/715336/compiler-tms320f28379d-question-about-the-flash-programming-and-fast-fpu-supplement

器件型号:TMS320F28379D
主题中讨论的其他器件:TMS320F28335C2000WAREcontrolSUITESFRA

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

你(们)好

我最近将从 TMS320F28335迁移到 TMS320F28379D。 我有两个问题:

第一个问题与闪存编程有关。 我看到一些通过 C2000Ware 器件支持进行28379D 闪存编程的示例。 但是、是否有一些可用的文档更好地解释了如何为 TMS320F28379D 执行闪存 API? 我知道 TMS320F28335已经有文档讨论了这一点。

第2个。 我正在尝试实现快速 FPU 补充数学库、就像使用 TMS320F28335一样。 以下是我在 cmd 文件、部分定义中的内容:

FASTTS_LIBRARY:

     l rts2800_fpu32_fast_addr.lib (.econst)
      l rts2800_fpu32_fast_addr.lib (.text)
 }    负载= FLASHG,
     运行= RAMD0_1、
     Load_start (_FastRTSLoadStart)、
    Load_End (_FastRTSLoadEnd)、
    RUN_START (_FastRTSRunStart)、
    PAGE = 0

我会不断收到 警告"10068-D no matching section" 、即使我确实包含了 lib 文件和路径。 您知道原因吗? FAST 补充 FPU 是否也适用于  TMS320F28379D  ? 是否有文档讨论了这一点?

谢谢

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

    1.如果您已安装 controlSUITE、闪存 API 文档应位于此处 c:\ti\controlSUITE\device_support\F2837xD\V210\doc\FlashAPI_Doc

    应该有与 C2000Ware 类似的路径


    2.无需将 FPU 补充复制到 RAM、您可以将此库添加到链接器搜索列表中。
    "10068-D no matching section"消息必须参考非现有 RAMD0_1。 28379的 CCS 默认*。cmd 文件不会列出此类段。 我想您是指 RAMD0?

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

    大家好、Edward

    对于第一个问题、我找到了该文档、谢谢

    对于第二个问题、我将 RAMD0和 RAMD1组合在一起为 RAMD0_1、我甚至尝试了 RAMG6、仍然会收到相同的警告。 所以、我认为这是另一种情况。

    这里我的问题是、如果我只将库添加到链接器搜索列表中。 我如何知道它已被使用、因为我在.map 文件中找不到任何内容、显示了 FPU 补充。 如果我不将其复制到 RAM 中、它从闪存运行、它是否会显著减速?

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

    海南

    我注意到您参考了 C2000Ware 的闪存编程示例-这很好。   

    与 controlSUITE (对于 F2837xD 已过时)不同、请参阅 C2000Ware 中的闪存 API 文档: \C2000Ware_1_00_05_00\libraries\flash_api\f2837xd\docs

    另请注意 ,我们在 http://processors.wiki.ti.com/index.php/C2000_Flash_FAQ 上提供了闪存 API wiki

    有关 RTS 库的闪存执行性能问题、请参阅数据表中的以下代码段、如果这有助于您:

    片上闪存存储器与 CPU 紧密集成、允许通过128位宽的预取读取从闪存直接执行代码并使用流水线缓冲器。 顺序代码的闪存性能等于从 RAM 执行。 考虑到不连续、相对于从 RAM 执行的代码、大多数应用程序的运行效率大约为80%。 这种闪存×使设计人员在从上一代 Delfino MCU 迁移时实现了2 μ A 的性能提升。

    如果您的应用程序使用该库中的某些函数、则您会在映射文件中看到它。  尝试在映射文件中搜索 RTS。

    谢谢、此致、

    Vamsi

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

    有关组合 RAMD0_1的说明。 是否未将其分配给 Page1而不是 PAGE0? 无论如何、"10068-D 无匹配段"属于由于页码不匹配而丢失的段或不可见的段。

    从 RAM 执行性能的相关信息。 正如 Vamsi 所说、它几乎是相同的。 此外、您应该知道、快速 RTS 在2837x 上没有意义、存在 TMU 会废弃快速 RTS、使其速度不是很快。 除法、sqrt、sin、cos、atan2比 RTS 快得多。 RTS 仅对直接访问 FPUmathTables 的 SFRA 库是必需的。 由于它的内插表只对闪存进行了很少的访问、它不是繁重的处理表、这可能会将大量放置表的内容减慢到较慢的存储器。 要使用 TMU、请确保在编译器处理器选项页面中选择了 tmu0和 fpu32、同时确保在优化页面中选择了-fp_mode = relaxed。

    关于"我在.map 文件中找不到任何内容会显示 FPU 补充"。 也许不使用此库中的符号。 如果使用了、则链接器可能会在默认库中找到等效项、您需要检查库。 链接器设置中的优先级。 应在链接器文件搜索路径设置中检查优先级顺序的搜索库、同时将快速 RTS 移至 lic.a 和/或 rts2800_fpu32.lib 之上。


    Edward
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢您的澄清。
    那么、我理解的是两件事、第一件事。 从闪存运行几乎与从 RAM 运行一样好。 第二、无需担心 F2837X MCU 中的快速 FPU 补充。 但是、我有一个扩展问题。
    如果我有一个 CLA 任务需要调用 sqrt (x)或 sin (x)等数学函数、我可以直接调用它们吗? 我尝试了但没有工作。 下面是我在".cla"文件中的内容:

    #include "cla_divide_shared.h"
    #include "F28x_Project.h"
    #include "math.h"

    extern UINT32 SumCla1;
    extern fTestCla1;

    _interrupt void Cla1Task1 (void)

    ClaSum1++;
    fTestCla1 = sin (SumCla1);
    GpioDataRegs.GPATOGGLE.bit.GPIO15=1;
    返回;


    其中、SumCla1和 fTestCla1定义为:

    #pragma DATA_SECTION (SumCla1、"Cla1ToCpuMsgRAM");
    uint32 SumCla1 = 0;
    #pragma DATA_SECTION (fTestCla1、"Cla1ToCpuMsgRAM");
    float fTestCla1 = 0;

    在编译该函数时、我遇到了大量错误。 您知道如何在 CLA 程序中调用数学函数吗?

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

    库函数在 CLA 上的使用。 由于 CLA 和 CPU 指令集不同、很明显、您无法从 CLA 调用为 CPU 编译的函数、也无法从 CPU 调用为 CLA 编译的函数。 遗憾的是,编译器/链接器不能防止此类错误,而 CLA 代码中的 sin ()将会编译但不起作用。 您需要使用 controlSUITE 或 C2000Ware 中的 CLAMathLib、其中 sin ()被称为 CLAsin ()、cos ()- CLAcos ()等

    (我使用了一些不同的架构、其中 CLA 等编译器的改编函数名称与主 CPU 的编译器不同。 这可以防止错误的函数链接,并允许使用主 CPU 和辅助处理器中的相同函数,如 sin()。 我认为应该在 TI 编译器中完成同样的操作。)


    #pragma DATA_SECTION (SumCla1、"Cla1ToCpuMsgRAM");
    uint32 SumCla1 = 0;
    #pragma DATA_SECTION (fTestCla1、"Cla1ToCpuMsgRAM");
    float fTestCla1 = 0;

    问题^^这是 CLA 代码中的静态非常量变量初始化未实现。 选项:
    -尽可能在 CPU 代码中初始化此类变量。
    -由于在初始化 CLA RAM 时、Cla1ToCpuMsgRAM 初始化为零、因此无需初始化零。
    创建变量初始化任务、例如 Cla1Task8()。 使用从 CPU 完成 CLA 初始化时触发一次 Cla1Regs.MCTL.bit.IACKE = 1;Cla1ForceTask8andWait();

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

    我可以将其视为已关闭吗?

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

    你(们)好

    是的、我让 CLA 数学部分正常工作。 非常感谢