DSP编程技巧之16_第1页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、dsp编程技巧之16 从上面的表中,可以看出c28x的编译器是支持64位的整数类型的,这使得在处理某些高精度智能的反馈数据时特殊便利,由于在更老的不支持64位整数类型的器件上编程时,需要我们自己定义64位类型,在运算时要自己定义运算规章才行。一个long long类型的整数需要用法ll或者ll前缀,才干被i/o正确处理,例如,我们用法下面的代码才干正确把它们显示在屏幕上: printf("%lld", 0x0011223344556677);printf("%llx", 0x0011223344556677);需要注重的是,虽然编译器支持了64位整数,但

2、是实际的cpu的累加器还有相关的cpu寄存器还是32位的,在程序运行时,64位整数类型是被cpu“软支持”的。我们可以添加相关的实时运行库来提高效率,其中包含了llabs(), strtoll() 和strtoull()等函数。浮点的处理从表1中我们可以看出,c28x的编译器支持32位的单精度浮点、64位的单精度和双精度浮点运算。在定义双精度64位变量时,也要记得用法l或者l前缀,否则会被视为双精度的32位变量,造成精度的损失。例如:long double a = 12.34l; /* 初始化为双精度64位浮点 */long double b = 56.78; /* 把单精度浮点强制类型转换为

3、双精度浮点 */在i/o处理时,也要标有相关的前缀,例如:printf("%lg", 1.23l);printf("%le", 3.45l);需要注重的是,虽然编译器支持了双精度浮点,但是fpu只支持硬件的32位单精度浮点,在程序运行时,双精度浮点类型是被cpu“软支持”的。特殊是long double的操作,需要多个cpu寄存器的协作才干完成(代码尺寸和执行时光都会变长);在多个long double操作数的状况下,前两个操作数的地址会传递到cpu辅助寄存器xar4和xar5中,其它的地址则被放置在栈中。例如下面的代码中:long double foo

4、(long double a, long double b, long double c)long double d = a + b + c;return d;long double a = 1.2l;long double b = 2.2l;long double c = 3.2l;long double d;void bar()d = foo(a, b, c);在函数bar()中调用foo的时候,cpu寄存器的值为:cpu寄存器寄存器的值xar4变量a的地址xar5变量b的地址*.sp2变量c的地址xar6变量d的地址cpu寄存器寄存器的值:在c28x的浮点操作中,以加法为例,其汇编代码是有区分的:lcr fs$add ; 单精度加法lcr fd$add ; 双精度加法普通状况下,没有特别的需要,彻低可以不有用双精度的浮点,例如在电机控制系统中,由于a/d采样的精度限制,囫囵系统的精度是无法实现那么高的精度的。数据类型无数,用法时一定要当心单精度与双精度,有符号与无符号,一个大于65535的数赋给16位宽的类型这些转换都是隐患重重,用法一定要当心啊!例如:假如你用excel分析对照数据记得excel中浮点类型只能用法双精度的浮点数。所以假如你把dsp中单精度的浮点数据取出放入exc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论