主题中讨论的其他器件:C2000WARE、
工具/软件:Code Composer Studio
尊敬的 TI 专家:
我将 CCS 8.2和 TI F28335实验套件用于我的项目。
首先,我使用 C2000ware 中的示例代码来查看使用 fastRTS 执行 atan()所需的周期数。
示例的目录为 C:\ti\c2000\C2000Ware_1_00_05_00\libraries\math\FPUfastRTS\c28\examples。
我发现第140行中的 atan()需要58个周期。 我通过在 atan()之前设置一个断点来进行计数、并在按下 F5之前和之后查看 CPUTIMER / TIMER0TIM 的差异。 (我不确定是否可以这样测量周期。) 结果接近于它在 SPRCA75中声明的值(对于 atan 为51个周期)。
但是、当我尝试在自己的项目中执行相同的操作时、我发现 atan 需要150个周期、通过重复上述方法进行测量。
我按照启用 fastRTS 的指令操作、并正确设置链接器顺序。 我非常确信它使用的是 fastRTS 而不是正常的 RTS。 这是因为,如果我更改链接器顺序以让正常 RTS 优先,那么当我在 atan()行上按 F5时,它将进入 atanf (float y,float x),并且需要更长的时间。 如果我使链接器顺序正确(fastRTS 优先)、那么当我按 F5时、它不会进入 atanf (float y、float x)。 这意味着它使用 fastRTS。
我的映射文件如下所示。 atan()位于 pll1.c. 我已将 pll1.c 中的所有函数复制到 RAM。 因此、我只能在 ramFuncs 部分中看到 pll1.obj、而不是.text 部分。
RAMFuncs 0 00305987 000011c3 运行 ADDR = 00009000
三、会议的报告
………………
003065a0 00000104 pll1.obj (ramFuncs)
三、会议的报告
.text 0 0030000a 0000566d
………….
003046e1 0000012b rts2800_fpu32.lib:e_logf.c.obj (.text)
.
00304a47 00000110 rts2800_fpu32.lib:e_expf.c.obj (.text)
00304b57 00000107 :LL_div28.asm.obj (.text)
三、会议的报告
00304fa8 00000083 rts2800_fpu32.lib:fd_mpy28.asm.obj (.text)
三、会议的结果
00305206 00000056 rts2800_fpu32.lib:boot28.asm.obj (.text)
0030525c 0000004f rts2800_fpu32_fast_补 遗.lib:atan2_f32.obj (.text)
.
00305438 00000034 rts2800_fpu32_fast_补 遗.lib:cos_F32.obj (.text)
0030546c 00000034 :Sin_F32.obj (.text)
003054a0 0000002d ePWM.obj (.text:retain)
003054cd 0000002a rts2800_fpu32.lib:l_div28.asm.obj (.text)
003054f7 00000029 :exit.c.obj (.text)
00305520 00000024 :cpy_tbl.c.obj (.text)
00305544 00000021 rts2800_fpu32_fast_finc补.lib:sqrt_F32.obj (.text)
00305565 00000020 rts2800_fpu32.lib:l_tofsfpu32.asm.obj (.text)
00305585 0000001f :fd_tol28.asm.obj (.text)
003055a4 0000001e :ll_cmp28.asm.obj (.text)
003055c2 0000001d :memcpy.c.obj (.text)
003055df 0000001c :fs_tofdfpu32.asm.obj (.text)
003055fb 00000019 :args_main.c.obj (.text)
00305614 00000019 rts2800_fpu32_fast_补 遗.lib:div_F32.obj (.text)
0030562d 00000018 rts2800_fpu32.lib:strncmp.c.obj (.text)
00305645 00000013 canrw.obj (.text)
00305658 0000000b rts2800_fpu32.lib:u_div28.asm.obj (.text)
00305663 00000009 :_lock.c.obj (.text)
0030566c 00000008 CodeStartBranch.obj (.text)
00305674 00000002 rts2800_fpu32.lib:pre_init.c.obj (.text)
00305676 00000001 :startup.c.obj (.text)
模块 代码 初始化数据 未初始化数据
---- ---- -------- ----------
..\src\
三、会议的报告
pll1.obj 520 0 0
我的问题是:
(1)通过查看 CPU 定时器的差异来测量周期是否正确?
(2)我自己的项目基于仅使用定点 IQmath 而不是浮点的旧项目。 我相信我已经打开了浮点单元,因为当我在 atan()行上按 F5时,它将进入 atanf (float y,float x)。
我只是想知道我错过了哪些寄存器或设置会为 atan 产生150个周期。 我应该如何检查? 我愿意花几天时间来研究原因并阅读一些内容。
提前感谢您。