Ⅰ DSP实验 让我用c语言编写程序完成计算sin(2.3π)+cos(1.7π)的值
何编程语言是难学的,真正的工作中有时候学习一个新语法只有不到一周的时间,语法而言都一样,如果还停留在语法层学习的上面,编写程序的道路你就连门都没有入.
但是后续的 数据结构和算法 稍微要看下书了,开始接触算法了,着和语法没有关系,之所以要先学好语法是为了能看懂用语法描叙的算法,学通了用任何语言来描叙都一样,到了这个阶段的就相当于抬起一条腿准备跨到起跑线一样,但还是没有入门.
到编译原理 和 图灵机 再到 自己编写微型的操作系统 就需要有个老师来引导了
我学软件开发就是从C开始一路由 ->国家数据库3级-> 程序员->高级程序员->系统分析师考上去然后通过近9年的工作,体会是如果你能够在市面上或者学校里精确买到或者学到的一门知识往往就表示你的层次还是不能让你得兴应手的在行业中创造你能想象的东西,真正的解决问题需要很多本书再加上80%以上的自己创造和理解才能做出来的时候才算真正懂得了你的工作.
一个程序员需要这样的经历
楼上的估计最高学历不过是理工科的一个大学生,应该还没毕业,没有在计算机行业呆过,在做芯片处理的工作中比如DSP芯片设计需要你天天接触算法,但是这和C语言本身有关系吗?傅立叶算法是数学家傅立叶设计出来的数学模型但是不适合做在计算机软件里面(运算量太大了比如离散的傅立叶变换等同于用序列Y(n×1列矢量)乘以n×n矩阵Fn,需要n×n次乘法。若n=1024,则是104,8576次乘法运算。什么概念呢?如果你选用的CPU单周期指令为25ns, 单周期也可以完成一次乘法运算,那么要计算1024点的傅立叶变换则需要26.2144ms,这还不包括加法或其它运算),我给出C算法如下:
void kkfft(double pr[], double pi[], int n, int k, double fr[], double fi[], int l, int il)
{
int it,m,is,i,j,nv,l0;
double p,q,s,vr,vi,poddr,poddi;
for (it=0; it<=n-1; it++)
{
m = it;
is = 0;
for(i=0; i<=k-1; i++)
{
j = m/2;
is = 2*is+(m-2*j);
m = j;
}
fr[it] = pr[is];
fi[it] = pi[is];
}
//----------------------------
pr[0] = 1.0;
pi[0] = 0.0;
p = 6.283185306/(1.0*n);
pr[1] = cos(p);
pi[1] = -sin(p);
if (l!=0)
pi[1]=-pi[1];
for (i=2; i<=n-1; i++)
{
p = pr[i-1]*pr[1];
q = pi[i-1]*pi[1];
s = (pr[i-1]+pi[i-1])*(pr[1]+pi[1]);
pr[i] = p-q;
pi[i] = s-p-q;
}
for (it=0; it<=n-2; it=it+2)
{
vr = fr[it];
vi = fi[it];
fr[it] = vr+fr[it+1];
fi[it] = vi+fi[it+1];
fr[it+1] = vr-fr[it+1];
fi[it+1] = vi-fi[it+1];
}
m = n/2;
nv = 2;
for (l0=k-2; l0>=0; l0--)
{
m = m/2;
nv = 2*nv;
for(it=0; it<=(m-1)*nv; it=it+nv)
for (j=0; j<=(nv/2)-1; j++)
{
p = pr[m*j]*fr[it+j+nv/2];
q = pi[m*j]*fi[it+j+nv/2];
s = pr[m*j]+pi[m*j];
s = s*(fr[it+j+nv/2]+fi[it+j+nv/2]);
poddr = p-q;
poddi = s-p-q;
fr[it+j+nv/2] = fr[it+j]-poddr;
fi[it+j+nv/2] = fi[it+j]-poddi;
fr[it+j] = fr[it+j]+poddr;
fi[it+j] = fi[it+j]+poddi;
}
}
if(l!=0)
for(i=0; i<=n-1; i++)
{
fr[i] = fr[i]/(1.0*n);
fi[i] = fi[i]/(1.0*n);
}
if(il!=0)
for(i=0; i<=n-1; i++)
{
pr[i] = sqrt(fr[i]*fr[i]+fi[i]*fi[i]);
if(fabs(fr[i])<0.000001*fabs(fi[i]))
{
if ((fi[i]*fr[i])>0)
pi[i] = 90.0;
else
pi[i] = -90.0;
}
else
pi[i] = atan(fi[i]/fr[i])*360.0/6.283185306;
}
return;
}
另外,虚机团上产品团购,超级便宜
Ⅱ 求一份dsp 28xx进行“位”操作的c语言程序,想学习一下,贴上来就可以了,谢谢!
双机通信在CPCI总线上的实现
基于CAN总线的电动汽车控制系统设计
基于CAN总线的EV电控系统通信的设计与开发
CAN总线的浅析CANopen协议
Profibus现场总线智能从站通信接口设计
中间总线结构的局限性
CAN总线技术在CFA6470型混合动力汽车中的应用
Armboot在EV40评估板上的移植
微型抢占式多任务实时内核设计
嵌入式系统的定义与发展历史
LF2407型DSP内嵌eCAN模块的检测程序设计
场输出电路:TA8445K
电话维修参考电路图
同线电话转接装置(2)
51、GREAT WALL GW-140140H型VGA多频彩色显示器的电源电路图
CNC动态卡在总线方式下的实现
AT89C2051驱动步进电机的电路和源码
带RTC的I2C总线铁电存储器FM31256
用CP2101将USB口扩展成串口
过孔全介绍
基于PC/104总线的旋转变压器电路设计
PCI9052接口电路的功能及应用
基于I2C总线的新型可编程增益放大电路的设计
RS-232串行通信消除干扰噪声的设计方法分析
基于嵌入式PC的PIII计算机系统设计与实现
软键盘产品界面显示的通用程序设计
三星ARM处理器S3C4510B的HDLC通道使用及编程
嵌入式系统的系统测试和可靠性评估
111、TYSTAR TY-1411型彩色显示器的电源电路图
送电电路
电路图:RS232-TTL-RS485
低压灯定时闪烁电路
Keil C51 总线外设操作问题的深入分析
基于增强型SPI接口的大容量Flash扩展实现
电路板设计中差分信号线布线的优点和布线策略
ARM/DSP双核系统的通信接口设计
嵌入式系统中扩展串行口的几种方法
At89c2051的一个AD转换应用实例
用C51写的液晶驱动程序
单片机C语言学习
变频分辨率
MSP430与I2C总线接口技术的研究
ARM922T核ZCP320A处理器PCI总线操作
CAN总线的嵌入式Web服务器设计
VME总线简介
耳塞式二管接收电话机
7107做的电压表(双表)
53、GREAT WALL GW-300300C型彩色显示器的电源电路图
嵌入式系统通用的应用软件结构研究
嵌入式系统开发要素的选择分析
Gdb/Armulator 源代码分析
LIN总线技术在汽车智能灯控系统中的应用
将 RS-485 用于数字发动机控制应用
数字家庭实践解决方案之:从装修开始
基于EPLD的PCI总线仲裁器的设计与实现
如何给PCI卡选用合适的总线控制器
开关设备
ARM基础知识七
DLVS平安城市应用解决方案
压敏电阻
在VxWorks下实现NAT/NAPT的方法
利用MC68HC908开发Pocket PC掌上电脑外设
uC/OS-II在配电监测终端仪表中的应用
72、NEC JC-140HM型SVGA多频TTL和VGA大屏幕彩色显示器的电源电路图
026、COMPAQ 420型VGA彩色显示器的电源电路图
彩电遥控器13
VxWorks下PC/104-CAN驱动程序设计
嵌入式GSM短信息接口的软硬件设计
TMS320VC5509与CameraLink相机的接口技术
单总线协议转换器在分布式测控系统中的应用
时尚智能家居主要布线内容
硬件开发的基本准则
新手入门,搭建J2ME开发环境
RS232/RS485应用分析
1553B总线在嵌入式系统中的应用
CAN总线在组合机床电控系统通信中的应用
嵌入式系统面向低功耗的协同设计
使用uC/OS-II操作系统的短信息电话机
基于Linux的嵌入式网络存储器设计
JTAG口及其对Flash的在线编程
36、CZX-14型显示器的电源电路图
74、NEC JC-1404HMN型多频TTL和VGA大屏幕彩色显示器的电源电路图
用于汽车电子的LIN总线驱动器
Freescale LIN总线应用开发平台
辅助电路
51的汇编控制指令详细列表
stc12c2052AD的Keil C头文件
开关型调节器的电路板布局技术
参数测量单元(PMU)的布线指南
基于DSP的高速PCB抗干扰设计
PROTEL原理图嵌入Word文档的实现与分析
PROTEL问答摘要
如何提高电子产品的抗干扰能力和电磁兼容性
基于RISC技术的8位微控制器设计
单片机和图形液晶显示器接口应用技术
uC/OS-II在EP7312上的移植
嵌入式Linux系统下Microwindows的应用
61、IBM 5153-002型彩色显示器的电源电路图
Ⅲ DSP怎样用C语言写程序啊
TI有C语言的例程的,是一个安装文件,安装之后才会出现那个文件夹。文件夹里面是芯片上外设的使用方法的程序,很简单,学过ANCIC的人能够看懂。
Ⅳ 新手学习DSP的C语言编程,请高手指点:
C6713没用过,我用过TMS320F2812的芯片。建议你先熟悉一下CCS开发环境,然后再认真的看代码。TI的DSP,封装了很多的头文件,没有必要全部都要看看头文件里是怎么写的。最好先把整个程序的运行流程看懂。然后结合芯片手册,看看每一步怎么做的,是如何通过配置寄存器、如何使用外设等等。关键还是看芯片手册。等熟悉了之后,再深入看头文件啥的。
Ⅳ dsp的程序问题。解释一下dsp c 语言的问题
从这些宏定义可以看到C语言是如何支持硬件编程的。
以#define IMR *(volatile unsigned int *)0x0004 为例:
1)0x0004,这个容易理解,是一个十六进制的常数
2)再看(volatile unsigned int *),这是一个强制转换,将0x0004转换成(volatile usigned int *)
3)现在解释volatile usigned int *是什么。* 表示指针(地址),这个指针指向一个 usigned int的数。最前面的volatile有特殊含义:这个指针必须保存在RAM中(不是FLASH或DSP寄存器中)
4)综合上面1)2)3)可知: (volatile unsigned int *)0x0004 的含义是:
0x0004是一个地址,在这个地址内保存的是一个unsigned int 类型的整数。这个地址存在于RAM
5)*(volatile unsigned int *)0x0004 最左边多一个*,表示取地址指向单元的内容。综合起来的意思是:从0x0004地址单元中取出一个usigned int 类型的数据值
6)#define IMR *(volatile unsigned int *)0x0004 的意思是,将从0x0004地址单元中取出一个usigned int 类型的数据值定义为IMR
7)根据DSP硬件,在DSP中RAM中的 0x0004地址单元恰好是中断管理寄存器!
8)绕了半天,#define IMR *(volatile unsigned int *)0x0004 的意思是:在C语言程序中,定义了一个宏标示符 IMR 来表示DSP中的中断管理寄存器。在程序中,可以通过这个宏标示符来使用这个寄存器:
unsigned int v = IMR; //取出中断管理寄存器的值并赋给v
Ⅵ 怎样进行DSP的C语言编程
在CCS里写C语言程序啊……
Ⅶ 如何利用C和汇编语言混合编程实现DSP软件设计
其中绝大部分功能不属于标准C语言,因此被称为C语言扩展。下面列出的是其中有益于DSP编程的一些功能。 内联汇编(inline assembly):该功能可以帮助编程人员将汇编指令插入C代码。 硬件寄存器绑定C变量:该功能经常与汇编指令内联功能结合在一起,帮助内联汇编代码访问C语言级的变量(见图3)。图3:结合内联汇编和硬件寄存器绑定功能的代码示例。 存储区属性:该功能允许编程人员将上述变量和函数分配到独特的用户定义存储区,可以让编程人员将C语言级单元分配到实际的存储器位置,这对DSP应用来说非常关键。 用户定义的调用约定:在某些情况下,汇编函数可以通过用户定义的调用约定取得更好的优化效果。 编译器内部函数(Compiler intrinsics):是指能够使用专门的宏或函数调用触发的内建编译器功能总称。没有内部函数支持的编译器必须调用用户定义的函数,这样做可能会令用户定义函数可能会在一个环路里产生函数调用和返回(见图4),从而产生巨大的开销。图4:ETSI的mult_r(乘法和取整)基本操作的C代码实现(左)和对应的由CEVA-TeakLite-III编译器生成的汇编代码(右)。 汇编内部函数:是将汇编代码内联进C代码的一种先进方法,下文将有详细介绍。把汇编指令当作C语句一样来编写内联汇编功能具有显着的缺点。它会破坏各种编译器优化操作,因为编译器不了解内联代码的内容,会使用最坏假设;以及它可能迫使编程人员处理底层问题,如寄存器分配和指令调度。汇编内部函数可以帮助编程人员实现内联汇编代码,并且不存在这些缺点。从编程人员的角度看,汇编内部函数就像是C语言宏或函数。它们接收C语言变量,返回C语言输出结果,同时表现为单个汇编指令。由于涉及该功能的所有代码都在C语言等级,因此编程人员不必担心寄存器分配、指令调度和其它底层问题。汇编内部函数不仅不会妨碍编译器优化操作,还会参与优化过程,就像它们是编译器正常产生的汇编指令一样。这些特征使得汇编内部函数的功能非常强大。利用汇编内部函数,编程人员可以从编译器不可能产生的独特汇编指令中受益。例如,CEVA-X1641的bitrev(位反向)指令就是为FFT等算法定制的。由于编译器不太可能把一个程序看作一个FFT并使用bitrev指令,因此编程人员可以完全把bitrev汇编内部功能嵌入到C代码中。结合对应用的透彻了解,编程人员还可以使用C应用程序的性能决定段里的精确序列汇编内部函数,从而能够确保编译器生成的代码效率就像手工编写的一样高。图5是CEVA-X1641编译器与汇编内部函数一起使用的例子。汇编内部函数还受益于由CEVA-X1641编译器处理的问题所决定的机器,如寄存器分配、指令调度和硬件单元分配。图5:CEVA-X1641编译器支持的汇编内部函数的使用。 调试混合代码的应用程序汇编代码的调试需要对延迟和存储器对齐限制等架构和机器级问题有深入的了解。只是简单地把C代码和汇编代码放在一起会使事情更麻烦,因为编程人员现在还必须调试C代码和汇编代码之间的连接。调试混合代码应用程序的第一步就是分隔问题。假设保持汇编代码的C语言实现不变以及C语言实现方案工作正常,那么将汇编函数转换成C语言实现并重新测试应用程序就相对比较容易。为了迅速检测出问题,编程人员可以在每一步把受怀疑函数的一半转换为相应的C语言实现方案。一旦有问题的汇编函数被确定,它就应该同时作为独立的汇编问题和C与汇编的连接问题加以分析。调试独立的汇编问题对汇编编程人员来说十分简单明了,但C与汇编的连接问题就有点麻烦。在考虑汇编函数本身时,C与汇编的连接问题是不可见的,这与独立的汇编问题有所不同。为了找出这些问题,编程人员必须检查编译器的约定,比如调用约定和寄存器使用约定。编程人员还必须检查编译器假设,比如汇编指令的行踪。为了节省调试时间,编程人员应该在第一次实现汇编函数时验证是否遵循所有的编译器约定和假设。
Ⅷ 利用c语言编程,使DSP28335的cpu定时器1在主频为100兆赫兹情况下每隔2秒触发定时器中断
摘要 C 语言编程常用的4种延时方法,其中两种非精确延时,两种精确一些的延时。for 语句和 while 语句都可以通过改变 i 的范围值来改变延时时间,但是 C 语言循环的执行时间都是不能通过程序看出来的。精确延时有两个方法,一个方法是用定时器来延时,这个方法我们后边课程要详细介绍,定时器是单片机的一个重点。另外一个就是用库函数nop();,一个 NOP 的时间是一个机器周期的时间,这个后边也要介绍。
Ⅸ 关于DSP的 C语言编程
这个还得结合具体点的解压算法来理解啊 只看这样的根据段落码来分别处理 没看算法真心看不懂具体的为什么这么操作 肯定是有算法依据的 结合文档看吧
Ⅹ DSP的C语言,菜鸟起步,高手帮帮忙;感激不尽
这是非整数的定点计算, 无论加减法, 乘除法, 都需要移位.