“线程:C2000WARE, controlSUITE”中讨论的其它部件
您好,
我已经开始使用 F28069执行一个新项目。
据我所知,我正在使用 Fast RTS 库。
但是,正弦函数调用和余弦函数调用各自需要463个周期,这是过度的。
地图文件显示正弦和余弦函数是从快速库中提取的。
可能 会出现什么问题?
谢谢你,
托马斯
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.
您好,
我已经开始使用 F28069执行一个新项目。
据我所知,我正在使用 Fast RTS 库。
但是,正弦函数调用和余弦函数调用各自需要463个周期,这是过度的。
地图文件显示正弦和余弦函数是从快速库中提取的。
可能 会出现什么问题?
谢谢你,
托马斯
Tomas,
我看到 第471和472行有一些警告。 你能告诉我它们是什么?
如果不使用 ROMTABLES 配置,是否已将 FPUMATHTables 正确地包括在链接器 cmd 文件中?
从地图文件中,您似乎正在 ROM 中使用 FastRTS API。 在这种情况下,还必须链接 ROM 符号库。
如果您计划使用闪存配置,则必须在运行时正确指定加载,运行,启动区域和对表进行内存复制。 请参阅这些配置的示例
请将这些信息反馈给我,以便我们能够缩小根本原因。
山塔努
我看到 第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 函数:
在这种情况下,还必须链接 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 位置的值以进行计算。 如果这两种情况属实,我们可能需要进一步调试。
山塔努
你好,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?
谢谢,
托马斯
我提供的就是一个例子。 controlSUITE 已过时。 请参阅 C2000ware 中的示例。 您可以在<c2000ware>/libraries/math/FPUFastRTS/c28/ examples 中找到它。 开箱即用的示例不适用于 F28069x。 因此,您必须采用任何示例并移植它们(方法是在项目设置中更改 device 变量,并在 device_support 中使用链接程序命令示例文件中的内存配置)。 除特定内存范围外,所有内容都将保持不变。
但关于您的屏幕截图,它看起来是正确的,并且正在引用正确的 API。 您是否可以通过组装逐步了解该功能并查看周期(在 CCS 中,运行->时钟),以确定哪些指令会导致高周期计数。
山塔努
我尝试过这样做,结果不好。
该项目现在正在使用正确的链接器文件,尽管存在错误(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 对我来说速度很快。