1412|0

6802

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

C600编程中语句的优化案例 [复制链接]

、if...else...语句的优化
(一)

1、源代码:

if (sub(ltpg, LTP_GAIN_THR1) <= 0)//ltpgLTP_GAIN_THR1,则adapt=1
{
        adapt = 0;
}
else
{
        if (sub(ltpg, LTP_GAIN_THR2) <= 0)
        {
                                        adapt = 1;
        }
}
else
{
        adapt = 2;
}
2、改编后的代码:
adapt = (ltpg > LTP_GAIN_THR1) + (ltpg > LTP_GAIN_THR2);
(二)
1、源代码:
if (adapt == 0)
{
        if (filt > 5443)
        {
                result = 0;
        }
        else
        {
                if (filt < 0)
                {
                        result = 16384;
                }
                else
                {
                        filt = _sshl(filt, 18) >> 16; // Q15
                        result = _ssub(16384, _smpy(24660, filt) >> 16);
                }
        }
}
else
{
        result = 0;
}
2、改编后的代码:
filt1 = _sshl(filt, 18) >> 16;
tmp = _smpy(24660, filt1) >> 16;
result = _ssub(16384, tmp * (filt >= 0));//filt<0则result = 16384;
result = result * (!((adapt != 0) || (filt > 5443)));//最巧妙的是,将if...else...融入表达式,adapt!=0和filt>5443任意一个条件成立result就等于0
(三)

1、源代码:
static Word16 saturate(Word32 L_var1)
{
        Word16 swOut;

        if (L_var1 > SW_MAX)
        {
                swOut = SW_MAX;
                giOverflow = 1;
        }
        else if (L_var1 < SW_MIN)
        {
                swOut = SW_MIN;
                giOverflow = 1;
        }
        else
                swOut = (Word16)L_var1;    /* automatic type conversion */
        return (swOut);
}
2、改编后的代码:
static inline Word32 L_shl(Word32 a, Word16 b)
{
        return ((Word32)((b) < 0 ? (Word32)(a) >> (-(b)) : _sshl((a), (b))));
}
3、优化方法说明:
        如果在循环中出现if...else...语句,由于if...else...语句中有跳转指令,而每个跳转指令有5个延迟间隙,因此程序执行时间延长;另外,循环内跳转也使软件流水受到阻塞。直接使用逻辑判断语句可以去除不必要的跳转。例如在例1的源代码最多有两次跳转,而改编后不存在跳转。例2和例3同样也去掉了跳转。

技巧:
        尽可能地用逻辑判断语句替代if...else...语句,减少跳转语句。


 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表