PIC16F1704 XC8V1.32Pro 编译器优化真的不可思议

2020-02-06 10:13发布

一段算一个数组中最大最小值的子程序
1)
void MaxMin(U32 *max, U32 *min)
{
    U8 i;
    U32 _max;
    U32 _min;
    U32 d;
    i=Settings[STABLE_TIME]-1;
    _max=0;
    _min=0xFFFFFFFF;
    while(i!=0xFF)
    {
        d=Lux[i];                // 用一个临时变量代替Lux[i]
        if(d>_max)_max=d;
        if(d<_min)_min=d;
        i--;
    }
    *max=_max;
    *min=_min;
}

2)
void MaxMin(U32 *max, U32 *min)
{
    U8 i;
    U32 _max;
    U32 _min;
    i=Settings[STABLE_TIME]-1;
    _max=0;
    _min=0xFFFFFFFF;
    while(i!=0xFF)
    {
        if(Lux[i]>_max)_max=Lux[i]; // 直接用Lux[i]
        if(Lux[i]<_min)_min=Lux[i];
        i--;
    }
    *max=_max;
    *min=_min;
}


在XC8 pro V1.32中编译, 1)比2)小59个word
但是同样程序放在AVRstudio里面(GCC),编译出来,1)和2)是一样的。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。