你现在位置:首页>技术论文>软件知识>正文
优化饱和加法运算
日期:2008-7-14 19:50:24 来源:本站整理  
点击: 作者:
点击【】放大字体.
通常计算机上的加法运算是循环的,例如 0x0001 + 0x7fff = 0x8000, 其中0x7fff是short类型的最大正值,0x8000是最小负值。假设我们是把两个声音相加,由于结果的符号反转,将出现不连续,如果我们把上面的数当做Q15定点小数来看的话,本来是正1(0x7fff),由于加了个很小的数(0x0001),结果却变为了负1(0x8000)。
WWW_P※LCJS_COM-PLC-)技.术_网

因此DSP芯片都支持饱和加法,当结果超出范围的时候,就取范围的上下限为结果:0x0001 + 0x7fff = 0x7fff。例如在5510芯片中,为了使用饱和加法只需要把状态位:SATA或SATD设为1即可(SATA和SATD的具体含义请参考手册)。这种位操作只能在汇编下进行,因此为了方便C语言编程,编译器提供了伪函数_sadd和_ssub。使用这些伪函数的时候,编译器会自动添加设置和清除饱和位的语句,例如:
W1WW_P4LCJS_COM-PLC-技.术_网

a=_sadd(a,b)可能会编译成
WW.W_PLC※JS_C,OM-PL,C-技.术_网

BSET ST3_SATA ;设置饱和位
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

ADD T0, T1
W1WW_P4LCJS_COM-PLC-技.术_网

BCLR ST3_SATA ;清除饱和位
WWW_PLC※JS_COM-PmLC-技.术_网

当几个_sadd连续使用的时候,编译器只设置和清除一次饱和位。但是当几个_sadd调用中间还有一般的加法的话,就会设置和清除好几次饱和位了。
WWW_P※LCJS_COM-PLC-)技.术_网

例如
WWW_P※LCJS_CO※M-PLC-技-.术_网

c= _sadd(c,b); // 设置并清除一次
WWcW_PLCJS_COM-PLC-技.术_网

c= a+c;
WWcW_PLCJS_COM-PLC-技.术_网

c= _sadd(c,b); // 再设置并清除一次
WWW.PLCJS.COM——可编程控制器技术门户

如果在一个循环中有多次这样的交叉调用的话,饱和位将被设置和清除很多次,这样显然是浪费DSP资源的。因此尽量把饱和加减的调用集中,为了减少设置清除饱和位的次数,一些不需要饱和运算的加减也可以使用饱和运算。如果可以把整个函数都改写为饱和加减运算的话,那么干脆在函数最前面添加asm(" BSET ST3_SATA");手工设置饱和位,这样程序中可以直接是用加减号运算。
评论内容
载入中...
相关文章
商城相关
相关下载
博客相关
论坛相关
P
L
C



|










|


P
L
C









·最新招聘信息
·最新求职信息
·推荐产品
·推荐厂商
深圳秦合源科技有限公司 
   深圳市秦合源科技有限公司是国内领先的规模较大品种齐全的称重传感器(Loadce......
广州汇巨自动化设备有限公司 
   广州汇巨自动化设备有限公司是一家专业工业自动化产品和自动化设备开发、维修改造、电......
深圳联脉电子有限公司 
   公司自1998年创立以来,一直致力于工业控制产品的研发、制造、销售,目前有机房监......
北京力天昭阳科技发展有限公司 
   北京力天昭阳科技发展有限公司(PekingPowerSkyScience&......
东莞市友诚自动化 
   本公司专业代理台湾永宏、台达PLC、HITECH人机、特价供应文本显示器MD20......
深圳市爱威轮实业有限公司 
   爱威轮实业对广大用户的技术支持与服务,贯穿于与客户接触的每一个环节中,渗透在每一......
·栏目热门排行
·站内热门排行
载入中。。
报告错误·关于我们· 用户帮助· 联系我们 · 友情链接· 本站服务 · 合作伙伴 · 版权声明· 招聘信息 · 投搞指南

迅闻自动化工程部声明如下:
旗下网站:PLC技术网(www.plcjs.com)-可编程控制器技术门户
网站备案号:粤ICP备17165530号
网站法律顾问:ITLAW-庄毅雄律师
法律保护:PLC技术网,迅闻电子,plcjs.com,plcjs.net,plcjs.cn等字样

Copyright 2010-2015. All rights reserved. 

51La