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.

[参考译文] TMS320F28069:正弦和余弦函数-长偏转

Guru**** 2551110 points
Other Parts Discussed in Thread: C2000WARE, CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1073383/tms320f28069-sine-and-cosine-function---long-exection

部件号:TMS320F28069
“线程:C2000WAREcontrolSUITE”中讨论的其它部件

您好,

我已经开始使用 F28069执行一个新项目。

据我所知,我正在使用 Fast RTS 库。

但是,正弦函数调用和余弦函数调用各自需要463个周期,这是过度的。

地图文件显示正弦和余弦函数是从快速库中提取的。

可能 会出现什么问题?

谢谢你,

托马斯

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

    Tomas,

    我看到 第471和472行有一些警告。 你能告诉我它们是什么?

     如果不使用 ROMTABLES 配置,是否已将 FPUMATHTables 正确地包括在链接器 cmd 文件中?

    从地图文件中,您似乎正在 ROM 中使用 FastRTS API。 在这种情况下,还必须链接 ROM 符号库。

    如果您计划使用闪存配置,则必须在运行时正确指定加载,运行,启动区域和对表进行内存复制。 请参阅这些配置的示例

    请将这些信息反馈给我,以便我们能够缩小根本原因。

    山塔努

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="419856" url="~/support/icros/c2000-icroms-group/c2f/c2000-微控制器-forume/1073383/tms320f28069-正 弦和余弦函数-长距离偏移/3972795#3972795"]

    我看到 第471和472行有一些警告。 你能告诉我它们是什么?

    [/引用]

    你好,shanty,

    这些警告是 “描述资源路径位置类型函数“cos”隐式声明为 Dyno_main.c /Dyno_F28069第471行 C/C++问题”。

    我确实通过包括数学头文件(#include <数学.h>)来修复了这些警告。 这并没有改变性能。

    [引用 userid="419856" url="~/support/icros/c2000-icroms-group/c2f/c2000-微控制器-forume/1073383/tms320f28069-正 弦和余弦函数-长距离偏移/3972795#3972795"]

     如果不使用 ROMTABLES 配置,是否已将 FPUMATHTables 正确地包括在链接器 cmd 文件中?

    [/引用]

    默认链接器文件中包括 FPUmath 表。 从该文件看来,这些库不会复制到目标,而是从 ROM (NoLoad)调用。

    我甚至不知道 ROMTABLES 配置是什么。 我在 F28069数据表和技术手册中搜索了此关键字,但没有发现任何内容。

    我正在使用闪存,再次使用标准的 memcpy 函数:

    [引用 userid="419856" url="~/support/icros/c2000-icroms-group/c2f/c2000-微控制器-forume/1073383/tms320f28069-正 弦和余弦函数-长距离偏移/3972795#3972795"]

    在这种情况下,还必须链接 ROM 符号库。

    如果您计划使用闪存配置,则必须在运行时正确指定加载,运行,启动区域和对表进行内存复制。 请参阅这些配置的示例

    [/引用]

    我应该看哪些具体示例? FLASH _F28069似乎没有任何相关代码。

    谢谢你。

    编辑:似乎即使从 ROM 运行,这些函数也不应该花费460个周期,而应该只花费<50。

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

    Tomas,

    我认为我看到了这个问题。  分配 FPUMathTables 时指定了 NoLoad,这意味着您正在使用 ROM 中的表。 为此,您还需要添加 ROM 符号库,以便应用程序可以使用这些表。 在这种情况下,您不需要从闪存到 RAM 的内存,因为您正在使用 ROM 中的表。 可以在 c2000ware 中找到 ROM 符号库。

    当您在闪存中加载表时,这种情况会有所不同。 在这种情况下,您需要按如下方式分配表:(在此情况下不要使用 NoLoad)

    FPUMATHTables:load = flash_BANK0_SEC1,
                   Run = RAMLS4,
                   run_start (FPUmathTablesRunStart),
                   load_start (FPUthTablesLoadStart),
                   load_size (FPUmathTablesLoadSize),

    然后,代码中的 memcpy (如指定)。  

    在您的情况下,我怀疑 API 可能正在使用标准的 RTS 三角函数,这些函数在没有 FPU 的情况下工作,导致时钟周期更高。 您可以如下验证:  

    单个组装步骤进入余弦函数调用。 检查是否正在执行 FPU32指令。 还要检查 API 是否正在读取 FPUMathTables 位置的值以进行计算。 如果这两种情况属实,我们可能需要进一步调试。  

    山塔努

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="419856" url="~ë/support/intrans/c2000微控制器-组/CC2000 /f/c2000微控制器-论坛/1073383/tms320f28069-正弦和余弦函数-长距离偏移/3973957#3973957"]FPUmathTables:load = flash_BSEC1,KAN1
                   Run = RAMLS4,
                   run_start (FPUmathTablesRunStart),
                   load_start (FPUthTablesLoadStart),
                   load_size (FPUmathTablesLoadSize),

    你好,shanty,

    这导致了链接过程中出现的一些问题-显然在 TI 提供的默认链接器文件中未定义 FLASH_BANK0_SEC1和 RAMLS4。

    ”0
    Run = RAMLS4,
    "./Cmd/F28069.cmd",第156行:错误:无可用于的有效内存范围
    放置“FPUMATHTables”
    FPUMATHTables:load = flash_BANK0_SEC1,
    "./Cmd/F28069.cmd",第156行:错误:程序不适合可用
    内存,或该部分包含需要蹦床的呼叫站点
    无法为此节生成。运行定位与对齐/阻塞"

    下面是从组件中打印出来的内容-它似乎执行 FPU 指令。

    对于我的程序,我是从提供的代码(即 controlSUITE 的 C2000 LaunchPad)启动它的。

    但是,您正在引用我不知道的 C2000Ware。

    您能为我提供一个功能最小的示例吗?我可以加载此示例以了解如何正确配置 DSP?  

    谢谢,

    托马斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="511823" url="~/support/intrans/c2000微控制器-组/CC2000 /f/c2000微控制器-论坛/1073383/tms320f28069-正 弦和余弦函数-长距离偏移/3974115#3974115"]这在链接过程中导致了许多问题-显然不是由 KTI_SECNE_KS4文件提供的。]

    我提供的就是一个例子。 controlSUITE 已过时。 请参阅 C2000ware 中的示例。 您可以在<c2000ware>/libraries/math/FPUFastRTS/c28/ examples 中找到它。 开箱即用的示例不适用于 F28069x。 因此,您必须采用任何示例并移植它们(方法是在项目设置中更改 device 变量,并在 device_support 中使用链接程序命令示例文件中的内存配置)。 除特定内存范围外,所有内容都将保持不变。  

    但关于您的屏幕截图,它看起来是正确的,并且正在引用正确的 API。 您是否可以通过组装逐步了解该功能并查看周期(在 CCS 中,运行->时钟),以确定哪些指令会导致高周期计数。  

    山塔努

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="419856" url="~ë/support/icins/c2000-微控制器-组/CC2000 /f/c2000 -微控制器-论坛/1073383/tms320f28069-正弦和余弦函数-长距离偏移/3974921#3974921"]我提供的是一个示例。 controlSUITE 已过时。 请参阅 C2000ware 中的示例。 您可以在<c2000ware>/libraries/math/FPUFastRTS/c28/ examples 中找到它。 开箱即用的示例不适用于 F28069x。 因此,您必须采用任何示例并移植它们(方法是在项目设置中更改 device 变量,并在 device_support 中使用链接程序命令示例文件中的内存配置)。 除特定内存范围外,所有内容都将保持不变。  [/引用]

    我尝试过这样做,结果不好。

    该项目现在正在使用正确的链接器文件,尽管存在错误(TI ram 函数),因此我不得不用谷歌搜索一点并将一些代码复制到链接器文件中。

    该项目现在正在编译。

    但是,在调试时,该示例从不会从设置功能中排除故障  

    //
    //设置系统计时
    //
    FastRTS_Example_setupSysCtrl();

    这很可能是由示例本身(C:\ti\c2000\C2000Ware_3_02_00\libraries\math\FPUfastRTS\c28\examples\Sin_F32)引起的,因为该示例为完全不同的处理器(F28002x)调用头文件。

    我完全按照您的建议操作,但这些示例似乎无法轻松移植到其他处理器上?

    ===

    回到装配体,我已经按照你的要求完成了-似乎每个装配体指令所花费的时间比预期的要长得多。

    另请注意以下说明的位置:3F6xxx -它们都位于闪存中。 这些函数似乎需要从闪存复制到 RAM 中。

      

    但更糟糕的是,输出也是错误的-输入角度为0.0,因此 cos 输出应为1.0,但输出为0.0。

    编辑:我实际上通过包括28069M 头文件而不是28069 头文件来修复此问题。 TRIG 函数现在可以正确计算,但每次执行仍需要~450个周期。

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

    问题现已解决。

    这是错误的:  

    1)考虑到闪存等待状态应为~3左右,组装步骤之间的 CPU 信号非常大。 结果是 InitFlash()函数调用不正确,因此闪存被初始化为其默认值,等待状态为“大”(15)。

    2)这将执行从~960个周期增加到~140个周期。 但是,这仍然比 FastRTS 数据表慢得多。 为了解决这一问题,我使用了提供的程序集文件,并将其部分更改为“ramfuns”,该部分从闪存复制到 RAM 中。 幸运的是,这些装配体文件优先于内置库中的函数。 现在的周期计数为88,它与 FastRTS 文档匹配,更具体地说是基准部分。

    基于这些数字,我很高兴。 我不需要将 FPU 表从 ROM 加载到 RAM。 ROM 对我来说速度很快。