
我用的是28XX系列的,不知道经验对你有没有用,因为不同系列的芯片多少有些差别。
TI提供的库已经相当可以了,兼顾易用与效率。我当时做过这样的测试
1 用IQMATH实现
2 直接C语言实现
3 C语言优化实现
4 原生汇编实现
IQMATH的运行周期在1000左右,比方案3快几十个周期,比方案4慢几个周期,方案2是10000多个周期。
另外,因为只是单独测的算法,汇编之所以快是快在寄存器的使用上, *** 作数可以直接入寄存器,但是考虑到程序其他部分是用C语言编写的话,把 *** 作栈的时间也加上,并不比方案1快。毕竟我对TI的汇编吃的也不透。
在编写上,无疑是方案1提供了最接近C语言风格的实现,几乎不用考虑ISA方面的问题。
另外对于执行效率,我觉得主要考虑三点:
1分支的使用
CCS对C语言的优化我没做过太多比对。其实单从反汇编的结果看,我接触过的嵌入式开发环境的编译器都能做出很好的优化。但是几乎每个编译器都会在逻辑的优化上有欠缺——它只能对一些显而易见的判断条件进行优化,而在写程序的过程中,我们经常出于易读性的考虑,或者稳定性的考虑,或者其他的考虑加入几乎不会发生的分支,这样的分支判断会消耗一定比率的代码段执行效率,视乎代码段内有用功能的长度而定,越长这个比率越小,越短这个比率越高。
2一般 *** 作,就是各种赋值 *** 作
在一般的 *** 作上,编译器的优化已经很令人满意了,基本上可以作为编写汇编的范本。我觉得所谓效率能达到90%就是针对这个部分说的。
3特殊 *** 作,比如对整块内存的 *** 作,或者是浮点运算上。
在一些特殊的 *** 作上,就要看是否有现成的库,或者看硬件是否支持。比如对整块内存 *** 作就别用循环一个字节一个字节的搬了。
以上三点都能考虑到的话,相信执行效率方面已经没有太大的提升空间了。
另外如果你的代码发生在初始化部分,也就是只在系统运行开始的时候运行一次,那么优化不优化其实没有太大的必要,除非你对系统初始化的时间有严格的要求。但是如果你的代码是作为任务要被反复运行的,那就有优化的必要了。
在CCS里有代码消耗时钟周期的统计,如果你觉得某段代码效率低下的话,可以先分段进行消耗时钟周期的计算,这样优化比较有针对性。
环境:Win7 + CCS v5 + XDS100v2仿真器 + TMS320CF2812芯片
烧写方法:将SRAMcmd替换成FLASHcmd。一个通用的用于F2812的 FLASHcmd 例子为
MEMORY
{
PAGE 0 :
OTP : origin = 0x3D7800, length = 0x000800
FLASHJ : origin = 0x3D8000, length = 0x002000
FLASHI : origin = 0x3DA000, length = 0x002000
FLASHH : origin = 0x3DC000, length = 0x004000
FLASHG : origin = 0x3E0000, length = 0x004000
FLASHF : origin = 0x3E4000, length = 0x004000
FLASHE : origin = 0x3E8000, length = 0x004000
FLASHD : origin = 0x3EC000, length = 0x004000
FLASHC : origin = 0x3F0000, length = 0x004000
FLASHB : origin = 0x3F4000, length = 0x002000
FLASHA : origin = 0x3F6000, length = 0x001FF6
BEGIN : origin = 0x3F7FF6, length = 0x000002
PASSWDS : origin = 0x3F7FF8, length = 0x000008
ROM : origin = 0x3FF000, length = 0x000FC0
VECTORS : origin = 0x3FFFC2, length = 0x00003E
PAGE 1 :
/ SARAM /
据我所知,CCS只支持DAT格式的数据导入。需要对txt中中所保存二维数组做FFT,你可以直接在你的工程中定义并初始化一个二维数组,数组中的元素为你txt中的所保存即可,然后对这个二维数组做FFT,对免去导入的过程,代码写起来也较为直观。如何使用dsplib库,你看下TI的该函数库的文档,里面应该有详细函数使用方法。
调出波形图,有以下几个步骤:
1)View -> Graph ->Time/Frequency。完成这几步之后,就会出来一个表格,如果什么都不填写,能看进一个基本的坐标图。
2)要明确自己需要的图是什么图,输出关于时间变量的图还是关于频率变量的图,如果不明白这两个的意思,好,那就做一个简单的说明吧。我们一般在示波器上看见的图就是时间图,那什么是频率图呢?比方说,我们需要看一个频率为5HZ的正弦信号,那么看到的正弦波是时间图,频率图就是在横坐标等于5的地方有一个竖线,表示只有频率等于5HZ的时候有值,其他的频率都没有值。如果你明白什么是FFT的话就更好理解了。
以上就是关于对DSP而言,CCS用C语言编程和汇编编程,二者的效率相差多少全部的内容,包括:对DSP而言,CCS用C语言编程和汇编编程,二者的效率相差多少、使用ccs烧程序时如何判断成功与否、CCS如何导入txt里的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)