导航:首页 > 源码编译 > dsp编译软件使用教程

dsp编译软件使用教程

发布时间:2022-03-12 11:52:01

1. DSP项目开发步骤

在现有的硬件基础上开发DSP软件大体步骤如下:
一、准备阶段
1、分析开发项目需求,即软件所需要具备的功能,如AD采样、通讯、外设控制等等;
2、了解硬件平台资源,如硬件存储器资源、外设IO资源、通讯接口等等,为DSP的初始化工作做准备的;
3、结合硬件资源和需求制定一个可行的软件方案;
二、代码编写阶段
代码编写因人而异,大体步骤:
1、搭建文件框架,一般一种功能对应一个.C文件和.H文件,根据1.1软件需求来;(特别提醒不要把所有代码都放在一个或几个文件里,不然哪怕注释得再清楚,在后期的调试和维护时都很费劲)
2、搭建函数框架,文件搭好后,在对应的文件中添加对应的功能函数,函数只需要定义函数名即可,如Void SystemInit(){;};
3、函数框架也搭好后就可以开始添加代码了,首先是添加DSP器件相关程序,比如系统时钟配置,中断函数;I/O功能脚配置等;其次逐块添加算法代码,原则是从易到难,每个函数框架代码搭建完后最好都进行测试。
三、调试优化阶段
以上一块块功能测试正常后,就可以开始整体测试了,直至最终调试完成。

以上仅是个人经验,仅供参考。

2. DSP程序过长如何编译

不一样编译么?遇到什么问题?超出存储空间啦?

3. DSP的程序怎么编写完整

main()
{
int i;
unsigned int * px;
unsigned int * py;
unsigned int * pz;
px=(unsigned int *)0x80000;
py=(unsigned int *)0x80100;
//-----请按实验要求将程序补充完整-----//

while(1)
{
for(i=0;i<16;i++)
{
scanf("%d",(px+i));
*(py+i)=0;
}
printf("\n");
pz=px;
px=py;
py=pz;
for(i=0;i<16;i++)
printf("%d",(py+i));
printf("\n");
}
// 在此加软件断点
}

4. 浅谈如何学习DSP软件开发

对于学习DSP重要的是理清外设的工作 构架,相应的寄存器如何设置,没有必 要对寄存器花太多的时间去研究,用的 时候能找到(寄存器的名称都是英文的 缩写,很好理解的)。学习DSP,先找 本中文教材入个门,之后你会发现好多 地方、尤其是真正要用的,往往也是最 复杂的地方书上都找不到,更谈不上做 什么项目了,这时候就要开始深入研究 Data Sheet,以及官网的源代码示例 有了之前的中文教材基础看起来就快多 了;学习DSP重要的不是会编程,而是 算法的研究(Matlab/Simulnk仿真就不

5. 请问DSP编程软件是什么,,应该用什么编程语言

DSP的编程软件是CCS开发平台,编程语言一般是C语言。

CCS有两种工作模式:

1、软件仿真器模式:可与DSP芯片分离,并在PC上模拟DSP指令集和工作机制,主要用于早期算法的实现和调试。

2、硬件在线编程模式:可以在DSP芯片上实时运行,结合硬件开发板的在线编程和调试应用程序。

CCS的开发系统主要由以下组件构成:

1、TMS320C54x集成代码生成工具。

2、CCS集成开发环境。

3、DSP / BIOS实时内核插件及其应用程序接口API。

4、RTDX插件,用于实时数据交换和相应的程序接口API。

5、TI以外的第三方提供的各种应用程序模块插件。

(5)dsp编译软件使用教程扩展阅读:

dsp编程中双重循环、多重循环的优化:

1、将多个循环分成单层循环以减少循环数;

例如,在双循环中,一个周期仅使用一个乘法器。 分成单层环路后,两个乘法器可以使用一个周期,充分利用DSP乘法器资源,运算速度也将提高。

2、循环次数少的放在外层循环,循环次数多的放在内存循环;

3、二维数组的双循环:二维数组的行循环置于外循环,列循环置于内循环;

4、避免在循环内进行乘法和除法运算:将循环内的乘法和除法运算尽可能移至循环外,并用加法代替。

6. DSP编译器如何进行优化

优化是一个很大的学问,c6000的编程工具指南(清华出版)大部分讲的是这个,可以看看,貌似这本书不好买

7. 如何在VDSP下生成和调用DSP库

有些资料可供你参考:
DSP的特点
对于没有使用过DSP的初学者来说,第一个困惑就是DSP其他的嵌入式处理器究竟有什么不同,它和单片机,ARM有什么区别.事实上,DSP也是一种嵌入式处理器,它完全可以完成单片机的功能.
唯一的重要的区别在于DSP支持单时钟周期的"乘-加"运算.这几乎是所有厂家的DSP芯片的一个共有特征.几乎所有的DSP处理器的指令集中都会有一条MAC指令,这条指令可以把两个操作数从RAM中取出相乘,然后加到一个累加器中,所有这些操作都在一个时钟周期内完成.拥有这样一条指令的处理器就具备了
DSP功能.
具有这条指令就称之为数字信号处理器的原因在于,所有的数字信号处理算法中最为常见的算术操作就是"乘-加".这是因为数字信号处理中大量使用了内积,或称"点积"的运算.无论是FIR滤波,FFT,信号相关,数字混频,下变频.所有这些数字信号处理的运算经常是将输入信号与一个系数表或者与一个本地参考信号相乘然后积分(累加),这就表现为将两个向量(或称序列)进行点积,在编程上就变成将输入的采样放在一个循环buffer里,本地的系数表或参考信号也放在一个buffer里,然后使用两个指针指向这两个buffer.这样就可以在一个loop里面使用一个MAC指令将二者进行点积运算.这样的点积运算对与处理器来说是最快的,因为仅需一个始终周期就可以完成一次乘加.

了解DSP的这一特点后,当我们设计一个嵌入式系统时,首先要考虑处理器所实现的算法中是否有点积运算
,即是否要经常进行两个数组的乘加,(记住数字滤波,相关等都表现为两个数组的点积)如果有的话,每秒要做多少次,这样就能够决定是否采用DSP,采用多高性能的DSP了.
浮点与定点
浮点与定点也是经常是初学者困惑的问题,在选择DSP器件的时候,是采用浮点还是采用定点,如果用定点是16位还是32位?其实这个问题和你的算法所要求的信号的动态范围有关.
定点的计算不过是把一个数据当作整数来处理,通常AD采样来的都是整数,这个数相对于真实的模拟信号有一个刻度因子,大家都知道用一个16位的AD去采样一个0到5V的信号,那么AD输出的整数除以2^16再乘以5V就是对应的电压.在定点DSP中是直接对这个16位的采样进行处理,并不将它转换成以小数表示的电压,因为定点DSP无法以足够的精度表示一个小数,它只能对整数进行计算.
而浮点DSP的优势在于它可以把这个采样得到的整数转换成小数表示的电压,并不损失精度(这个小数用科学记数法来表示),原因在于科学记数法可以表示很大的动态范围的一个信号,以IEEE754浮点数为例,
单精度浮点格式: [31] 1位符号 [30-23]8位指数 [22-00]23位小数
这样的能表示的最小的数是+-2^-149,最大的数是+-(2-2^23)*2^127.动态范围为20*log(最大的数/最小的数)=1667.6dB 这样大的动态范围使得我们在编程的时候几乎不必考虑乘法和累加的溢出,而如果使用定点处理器编程,对计算结果进行舍入和移位则是家常便饭,这在一定程度上会损失是精度.原因在于定点处理处理的信号的动态范围有限,比如16位定点DSP,可以表示整数范围为1-65536,其动态范围为20*log(65536/1)=96dB.对于32定点DSP,动态范围为20*log(2^32/1)=192dB,远小于32位ieee浮点数的1667.6dB,但是,实际上192dB对绝大多数应用所处理的信号已经足够了.

由于AD转换器的位数限制,一般输入信号的动态范围都比较小,但在DSP的信号处理中,由于点积运算会使中间节点信号的动态范围增加,所以主要考虑信号处理流程中中间结果的动态范围,以及算法对中间结果的精度要求,来选择相应的DSP.另外就是浮点的DSP更易于编程,定点DSP编程中程序员要不断调整中间结果的P,Q值,实际就是不断对中间结果进行移位调整和舍入.
DSP与RTOS
TI的CCS提供BIOS,ADI的VDSP提供VDK,都是基于各自DSP的嵌入式多任务内核.DSP编程可以用单用C,也可以用汇编,或者二者结合,一般软件编译工具都提供了很好的支持.我不想在这里多说BIOS,VDK怎么用这在相应的文档里说的很详细.我想给初学者说说DSP的RTOS原理.用短短几段话说这个复杂的东西也是挑战!^_^
其实DSP的RTOS和基于其他处理器的通用RTOS没什么大的区别,现在几乎人人皆知的uCOSii也很容易移植到DSP上来,只要把寄存器保存与恢复部分和堆栈部分改改就可以.一般在用BIOS和VDK之前,先看看操作系统原理的书比较好.uCOS那本书也不错.
BIOS和VDK其实是一个RTOS内核函数集,DSP的应用程序会和这些函数连接成一个可执行文件.其实实现一个简单的多任务内核并不复杂,首先定义好内核的各种数据结构,然后写一个scheler函数,功能是从所有就绪任务中(通过查找就绪任务队列或就绪任务表)找出优先级最高的任务,并恢复其执行.然后在此基础上写几个用于任务间通信的函数就可以了,比如event,message box,等等.

RTOS一般采用抢先式的任务调度方式,举例说当任务A等待的资源available的时候,DSP会执行一个任务调度函数scheler,这个函数会检查当前任务是否比任务A优先级低,如果是的话,就会把它当前挂起,然后把任务A保存在堆栈里寄存器值全部pop到DSP处理器中(这就是所谓的任务现场恢复).接着scheler还会把从堆栈中取出任务A挂起时的程序执行的地址,pop到PC,使任务A继续执行.这样当前任务就被任务A抢先了.
使用RTOS之后,每个任务都会有一个主函数,这个函数的起始地址就是该任务的入口.一般每个任务的主函数里有一个死循环,这个循环使该任务周期地执行,完成一部分算法模块的功能,其实这个函数跟普通函数没任何区别,类似于C语言中的main函数.一个任务创建的时候,RTOS会把这个函数入口地址压入任务的堆栈中,好象这个函数(任务)刚发生过一次中断一样.一旦这个新创建任务的优先级在就绪队列中是最高的,RTOS就会从其堆栈中弹出其入口地址开始执行.
有一个疑问是,不使用RTOS,而是简单使用一个主循环在程序中调用各个函数模块,一样可以实现软件的调度执行.那么,这种常用的方法与使用RTOS相比有什么区别呢?其实,使用主循环的方法不过是一种没有优先级的顺序执行的调度策略而已.这种方法的缺点在于,主循环中调用的各个函数是顺序执行的,那么,即使是一个无关紧要的函数(比如闪烁一个LED),只要他不主动返回,也会一直执行直到结束,这时,如果发生一个重要的事件(比如DMA buffer full 中断),就会得不到及时的响应和处理,只能等到那个闪烁LED的函数执行完毕.这样就使整个DSP处理的优先次序十分不合理.而在使用了RTOS之后,当一个重要的事件发生时,中断处理会进入RTOS,并调用scheler,这时scheler 会让处理这一事件的任务抢占DSP处理器(因为它的优先级高).而哪个闪烁LED任务即使晚执行几毫秒都没任何影响.这样整个DSP的调度策略就十分合理.
RTOS要说的内容太多,我只能讲一下自己的一点体会吧
DSP与正(余)弦波
在DSP的应用中,我们经常要用到三角函数,或者合成一个正(余)弦波.这是因为我们喜欢把信号通过傅立叶变换映射到三角函数空间来理解信号的频率特性.信号处理的一些计算技巧都需要在DSP软件中进行三角函数计算.然而三角函数计算是非线性的计算,DSP并没有专门的指令来求一个数的正弦或余弦.于是我们需要用线性方法来近似求解.
一个直接的想法是用多项式拟合,这也正是大多数DSP C编译器提供正余弦库函数所采用的方法.其原理是把三角函数向函数空间{1,x,x^2,x^3....}上投影,从而获得一系列的系数,用这些系数就可以拟合出三角函数.比如,我们在[0,pi/2]区间上拟合sin,只需在matlab中输入以下命令:
x=0:0.05:pi/2;
p=polyfit(x,sin(x),5)
就得到5阶的多项式系数:
p =
0.00581052047605 0.00580963216172 -0.17193865685360
0.00209002716293 0.99969270087312 0.00000809543448
于是在[0,pi/2]区间上:
sin(x)= 0.00000809543448+0.99969270087312*x+ 0.00209002716293*x^2-0.17193865685360*x^3+
0.00580963216172*x^4+0.00581052047605*x^5
于是在DSP程序中,我们可以通过用乘加(MAC)指令计算这个多项式来近似求得sin(x)

当然如果用定点DSP还要把P这个多项式系数表用一定的Q值来改写成定点数.
这样的三角函数计算一般都需要几十个cycle 的开销.这对于某些场合是不能容忍的
另一种更快的方法是借助于查表,比如,我们将[0,pi/2]分成32个区间,每个区间长度就为pi/64,在每个区间上我们使用直线段拟合sin曲线,每个区间线段起点的正弦值和线段斜率事先算好,存在RAM里,这样就需要在在RAM里存储64个
常数:
32个起点的精确的正弦值(事先算好): s[32]={0,sin(pi/64),sin(pi/32),sin(pi/16)....}
32个线段的斜率: f[32]={0.049,.....}
对于输入的每一个x,先根据其大小找到所在区间i,通常x用定点表示,一般取其高几位就是系数i了,然 后通过下式即可求出sin(x):
sin(x)= s*f
这样一般只需几个CYCLE就可以算出正弦值,如果需要更高的精度,可以将区间分得更细,当然,也就需 要更多的RAM去存储常数表.
事实上,不仅三角函数,其他的各种非线性函数都是这样近似计算的.
1. 接触DSP
在参加过一次社会上多的尽乎到了泛滥地步的"DSPxxx"培训班之后,我"自信"已经具备DSP工师资格,便欣喜若狂跑道书店买了一本名为"DSP xxx应用"的书,作者叫xxx,并且是这个领域的牛人,这本书确实是很出色的书籍.但是当时,对于我这个对DSP一窍不通、刚刚入门的人来说却建立了一个错误的概念--DSP是个很容易的领域,只要培训一下,再稍微看看书,就可以成为专家.所以,现在看来,这些都是误导,我认为学习DSP技术应该分为两个阶段,第一阶段学习DSP技术基础概念;第二阶段学习DSP技术的行业应用.那本"DSP xxx应用"的书,它更适合书名应叫做"DSP中的数学或物理运用"...什么的.

2. 购买DSP学习套件
有了兴趣,就要去学习,于是我撺掇领导批准购买了DSP学习入门套件(DSK),许多公司均有销售,如TI等,大概是需要3000-4000人民币.买后不久,我就发现,这种套件对于我来说一点用处都没有.因为我的基础知识实在是太差了.这些套件对于我来说,只是另一种涵义的PC机及一些外围设备,想要懂的这些东西,我就需要去读更多的相关书籍,这时,很难没有想要放弃的念头,我开始有点畏惧DSP这种技术,门槛太高了.可是,我不能放弃,我已经投入了许多的金钱和时间,我不想丢掉这4000元钱,也不能对领导没有交待.事实上,我没有想到,我将付出更多的钱和时间去学习.
3. 再次参加培训班,再次购买DSP书籍
在我就感到了无助,困惑之际.我又想到了放弃.虽然我的数学还算不错,但其中遇到的一些问题在我思考后,还是无法解决,我越来越畏惧DSP了.于是,我开始在"google"上搜索DSP培训相关的信息,终于发现闻亭公司"DSP培训中心"的教程和内容正是我一直寻找的东西.也许是DSP技术对我的有着巨大的诱惑力,也许是我的之直着,我又一次勇敢的报名参加了培训.32个课时之后,解决了我半年多来积累的很多粗浅的问题.再翻开培训教材刚刚复读了第一章时,我想如果这本教材是我读到的第一本书,并且我没有花4000元买那个可*的学习套件,我会毫不犹豫的投降,放弃学习DSP,但.......那个可*的xxx作者,他的书怎么可以用作教学呀.他的书虽然让我对DSP产生了浓厚的兴趣,却把我引到了一条艰难的路上,而且花了那么多的冤枉钱....既然事已如此,我只有慢慢的去读这些书籍,在我读到教材的后面章节以后,我开始明白前面章节的内容,所以当你读书遇到不明白的时候,千万不要气馁.有时,一个内容,可能需要读上几遍,才能明白,这比一开始的感觉要好的多了.
4. 实验--至关重要的一步
现在,从你的架子上取下那套DSK,去尝试做一些小实验,我的第一个实验是"正弦发生器",这个实验比较简单,但是它也花费了我几周的时间去读大量的关于串口、编码、寄存器等的书并且进行大量的实验.这个执行半小时的"正弦发生器",让我查阅了恨不得够组建一个图书馆的书籍,而且这个东西没有任何用途.我是用汇编语言在54x中执行,这个实验让我很好的理解了什么是DSP,什么是McBSP, DMA, 等.当然问题也同步产生了,我就又不得不做了许多的实验去验证.我建议,在系统未定型之前,使用mathlab/simulink进行仿真,并且可以多实验几种芯片,这样可以让你明白更多的内容.我觉得我就要成为一个真正的DSP工程师了,我度过了最困难的时期.我觉得自己是个英雄,嘿嘿.
5. 去寻找一份与DSP相关的工作,去当个DSP工程师
我希望困难已经过去,但这种愿望为时过早了.在DSP的研究中,我还遇到了很多的困难,由于篇幅有限,我就不在进行描述了.反正,如果想成为真正的DSP专家,就不要期望事情会变得容易.有些DSP开发人员并不知道什么是真正的0和1,他们只会查阅各种参考书籍和参数表,我们并不提倡这种做法.因为这些人选择了一种简单的做法,但是他们并不是真正的DSP开发人员.他们只是编写一些他们不理解的代码,他们似乎在担当着一台"编码器"的角色.
6. 总结
这篇文章只是我的一点感慨,可能并不是很适用现在的DSP开发工程师,因为,市面上已经有了供你学习的DSP教学套件,搭配了多种实验供你参考,轻松入门,如:闻亭公司的"大学实验箱"什么的.这个实验箱提供了一个很好的实验环境,并且为初学的你设计了多种实验、教材,让你由浅入深的学习.不会向我似的,绕一大圈才走到正

8. DSP编程软件

做DSP MATLAB是首选,它提供很多强大的工具箱,有很多分析用到的函数,可以以多种形式输出结果,用c的话还要自己去写很多函数,耗费时间太长,一般只适合做某个算法的验证。

9. dsp 用什么编程

CCS

CCS有两种工作模式:

1、软件仿真器模式:可以脱离DSP芯片,在PC机上模拟DSP的指令集和工作机制,主要用于前期算法实现和调试。

2、硬件在线编程模式:可以实时运行在DSP芯片上,与硬件开发板相结合在线编程和调试应用程序。

CCS的开发系统主要由以下组件构成:

① TMS320C54x集成代码产生工具;

② CCS集成开发环境;

③ DSP/BIOS实时内核插件及其应用程序接口API;

④ 实时数据交换的RTDX插件以及相应的程序接口API;

⑤ 由TI公司以外的第三方提供的各种应用模块插件。

(9)dsp编译软件使用教程扩展阅读

dsp编程中双重循环、多重循环的优化:

(1)多重循环拆成单层循环,减少循环层数;

例如,双重循环内一个cycle只使用了一个乘法器,拆成单层循环后,一个cycle可使用2个乘法器,充分利用DSP乘法器资源,同时运算速度也会加快;

(2)循环次数少的放在外层循环,循环次数多的放在内存循环;

(3)二维数组的二重循环:二维数组的行循环放在外层循环,列循环放在内层循环;

(4)避免循环内部的乘除运算:循环内部的乘除运算尽量移到循环外部以及用加法替代。

10. 怎么学dsp编程

接手别人的程序的话,看懂没有用的,自己建立个工程,一点一点自己写一写程序,就有感觉了。和DSP相关的芯片的话,拿着原理图找图上的芯片的datasheet看。DSP有很多模块,我是习惯用到哪块看哪块,不然太多了……DSP的编程和单片机差不多,都是配置寄存器,看懂寄存器都在完成什么配置,就能写出基本的驱动程序了,然后逻辑方面和VC上差不多。不过,调试DSP和PC机上程序最大的不一样就是,它是硬件相关的,调试的时候有问题,既可能是软件是问题,也可能是硬件问题,反正总是要拿着示波器慢慢找~~

阅读全文

与dsp编译软件使用教程相关的资料

热点内容
c代码编译吃cpu频率还是核心 浏览:165
pdf签名adobe 浏览:405
在家无聊解压图片 浏览:534
单片机拨打电话 浏览:440
单片机问题解说 浏览:795
我的世界手机版命令方块零重力 浏览:689
解压游戏无广告最新版 浏览:423
如何下载养生堂app 浏览:242
oracle中文乱码java 浏览:937
儿童编程实践课小结 浏览:482
APP是如何实现数据获取的 浏览:522
买车子看什么app 浏览:832
美国单片机 浏览:815
如何在app上架自己的游戏 浏览:461
安卓系统车载导航支持什么格式u盘 浏览:626
天翼云服务器怎么打开端口 浏览:911
如何启用对服务器远程的访问 浏览:778
程序员环境分析 浏览:820
tsp算法是数据挖掘算法吗 浏览:675
编译原理好处 浏览:826