Other Parts Discussed in Thread: C2000WARE
这个芯片如何开启三角函数库和浮点运算库?头文件在哪里添加?C2000Ware里面能找到例程吗?我尝试打开了TMU0和浮点的relaxed选项,用定时器计算原有程序的负载率,结果负载率飙升,这些东西需要如何配置?
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.
这个芯片如何开启三角函数库和浮点运算库?头文件在哪里添加?C2000Ware里面能找到例程吗?我尝试打开了TMU0和浮点的relaxed选项,用定时器计算原有程序的负载率,结果负载率飙升,这些东西需要如何配置?
你好,这款芯片是没有TMU单元的。可以选择F28004x,F28002x,F28003x等型号芯片
我知道没有TMU,选项配置选择TMU0只是打开宏但是没有TMU功能,因为浮点运算类型想要选择relaxed必须要打开TMU的宏和relaxed宏同时生效。这个先不管,三角函数库与浮点运算库要怎么打开啊?浮点运算在设置里面打开FPU32就行了吗?三角函数库有没有库文件?
抱歉没看明白你的意思。
要启用TMU可以设置:
--float_support=fpu32 和 --tmu_support=tmu0。
如果希望在 C 代码中使用 TMU,则必须打开附加选项。
--fp_mode=relaxed
这样就可以使编译器用 TMU 指令替换对标准 C 数学库的调用,如正弦或余弦。
这个帖子也可以看一下,不知道有没有帮助:e2e.ti.com/.../tms320f28377d---fp_mode-relaxed-meaning
是指用FPU计算三角函数吗?可以看一下这个帖子:https://e2echina.ti.com/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/197616/fpu32_fast_supplement?tisearch=e2e-sitesearch&keymatch=%22F28335%22%26%22%E4%B8%89%E8%A7%92%E5%87%BD%E6%95%B0%22#
帖子的问题部分描述的基本没错,只要将C2000 linker->File Search Path中rts2800_fpu32_fast_supplement.lib的顺序调整至最高就可以了
好的,链接内容我看到了,我的工程内确实是吧这个库文件放置在了最高位置。map文件内也确实看到了,除了map文件内看到这个还有其他手段能验证三角函数的优化成都的手段吗。目前觉得运算的速度比较慢,在排查三角函数库是否真正起作用
我下午试了一下,在C2000 linker->File Search Path中把rts2800_fpu32_fast_supplement.lib的位置放到最下面,以及给这个库路径删除,结果负载率并没有什么变化,删除了路径之后也没有报错。所以很难讲三角函数库有没有开启。有什么手段验证一下
额,不好意思之前比较急没仔细看那个帖子。
帖子里面调整lib顺序的地方应该是在下图中的位置,不是在File Search Path中:
你再测试一下看看。另外,--float_support 选择fpu32,不过这个应该都设置好了的:
按照你说的也试了一下,删除这个库之后运行几个三角函数跟删除库之前负载率也没有变化,这意思是之前三角函数库没有开启成功吗
图片上是删除库之后的?你的程序中还调用了IQmath是吗?
你的测试程序段方便一起上传一下吗?
是的,测试之前程序中是带有FPU库的,并且位置在第一位。上传的图片是删除了FPU库,测试三角函数负载率无变化。负载率就是定义程序100us运行周期,执行完一次计时器得到的运行时间在100us中的占比。添加了FPU库执行程序,程序中运行一个cos函数,还包含了一些其他的程序代码,但是这些程序代码中不包含三角函数,都是数值传递和加减法,负载率在10%。删除了FPU库,负载率还是10%,没有明显的负载率的变化,证明删除库前后cos函数运行的时长没有变化。
另外我看了一下这个连接:https://software-dl.ti.com/ccs/esd/documents/sdto_cgt_floating_point_optimization.html。针对浮点的设置,我的程序中是设置的strict模式而非relaxed模式,编译器可以重新关联浮点。我又尝试过将fp-mode改成relaxed,但是负载率飙升。按照文档中的意思,更改成relaxed会提升速度而损失精度(小范围的损失),可是为什么负载率翻唱的变高呢?
你好,方便把link order中带有rts2800_fpu32_fast_supplement.lib的截图上传一下吗。
我需要整理一下然后去咨询一下其他工程师
原本包含的库是第二行的库,后面我根据详细路径包含了图片中第一行的库,工程师们看一下这两个路径下的库会不会存在差异。不过现在看不管是添加了哪个路径还是两个路径都添加,跟路径全都删掉负载率是一样的
好的,我已经将问题整理发送给国外工程师一起看一下,因为时差原因回复会慢一点,但是有回复我会尽快更新跟你。
很奇怪的是隔了两天了还没收到回复,我又催了一下,不知道今晚能否回复
你好,对方希望你确认一下,CCS设置中是否使能了--tmu0,如果没有的话可以使能一下再尝试
另外可以检查一下代码是使用FastRTS函数还是c内部函数?
很抱歉最近几天忙着其他事情没有来得及回复。程序是没有使能TMU0的,最开始有尝试过打开TMU0的同事给浮点运算类型用relaxed,但是负载率飙升到300%以上,便又关闭了这些功能。程序内部使用的是C函数,例如正余弦就用的sinf和cosf。RTS库中有定义其他类型的函数吗?
在开启TMU0并且_fpmode设置成relaxed之后,我这里的浮点计算就出现问题了,负载率的计算值变成了3.2767,就是327.67%
收到回复:
“fp_mode = relaxed”通常以精度换取速度,所以可能导致负载率飙升。
如果使用 C intrinsics,则库的链接方式可能存在问题。 该程序应使用 FPU32 指令(检查反汇编窗口)。
这个fpmode = relaxed我知道是牺牲精度换取速度,但是他也应该是计算出来一个相对准确的结果,而不是计算出来的结果呈现出32767这样错误的状态。真实的运行时间是没有变的,是浮点计算得到的结果错误。而且有一点,我手中别的型号的芯片也有用relaxed模式,它的负载率的浮点计算就没有出现32767这样的错误。所以肯定是浮点计算异常。
另外恢复的“库的链接方式可能存在问题”是什么意思?库的引入要如何设置?有没有官方的说明文档讲解浮点运算库在内的数学应用以及CCS设置?现在急需对浮点运算的验证,这个问题我在各个论坛都在寻找解决办法,但是都没人能真正解决。
你提到计算结果错误,之前应该没有看到这个反馈。所以现在问题不仅是计算负载率高,计算结果也有错误?
另外,其他型号的芯片在计算正确的情况下,负载率也有突增的情况吗?
是我表述不清楚了。表现的现象看似是负载率变高,但其实是最终负载率的计算结果是错误的,变成了3.2767。表现为看着像是负载率升高,因为最开始我只是监控了最终的结果,后面我监控了程序执行一次的定时器count值,这个值其实并没有陡增,在一个合理的范围之内。
至于其他的芯片,因为相应的开发工程师是严格使用TI的包括电机控制在内的运算库,虽然设置了TMU0且fpmode = relaxed,但其浮点运算结果都是可用的,并不会出现我这种无论参与运算的数值为多少,结果长32767的情况。而我这边的程序从最开始的开发人员那里并没有使用TI的运算库,随着性能的不断挖掘,再去开启响应的运算库,同样的算法我手里的程序运行一个周期所占用的负载率就会更高(定时器记录的count值更多),就怀疑是数学运算库以及浮点运算没有成功开启,想要验证一下。之后就出现了本帖上述的种种现象。而我这边对TI的各种运算库又不是很深入的了解,还请TI的工程师解惑,这个浮点运算FPU,按照正常的流程都是怎么配置的,如何验证已有的程序开启未开启。我可以与我手中的程序的配置项多对比,也可以侧翻反应运算库的使用情况。
额,说实话这个帖子时间跨度有点大,前后内容我也有点连贯不起来。
总结一下,其实你现在就是想知道如何正确地调用rts2800_fpu32_fast_supplement.lib库来进行三角函数运算的是吗?
看到你上面说的,其实我有点怀疑是不是你程序的问题,因为根据我们之前沟通的内容我觉得你的fpu运算库已经添加正确了,还是有问题的话可能跟你程序里面的其他设置相关。
我建议你可以先在例程的基础上添加你的三角运算代码,然后在例程中添加rts2800_fpu32_fast_supplement.lib库,这样验证一下你调用该函数库的方法是否正确。
例程位置:C:\ti\c2000\C2000Ware_4_01_00_00\device_support\f2806x\examples\c28
我按照例程的配置项对我手里的程序做了修改,运行一个遂周期变化的余弦函数和一个遂周期变化的等式。在修改配置前与修改配置后运行时间是一样的,所以我现在也搞不清楚这个FPU了。
如果直接在例程里面加入你的代码,然后修改对应的配置呢?
因为我想的是会不会你自己的程序有什么地方的设置跟三角函数库起冲突什么的。
甚至你可以试试换其他电脑的CCS。