(求助)CW5.1,代码复用问题,其实也不仅限于CW5.1

2020-02-19 21:04发布

本帖最后由 jiang887786 于 2015-3-14 15:52 编辑

老生常谈,还是代码复用问题,其实也不仅限于CW5.1。我的问题是我有下面的代码(/*循环渐进法求平均值*/),我想一个工程文件里面多次使用到它。一个使用到6-7次一个工程里面,问题是现在我要使用一次(一个函数需要调用它处理数据),我就要复制一个和它相同的函数而且要改名!,比如改成PL_MeanValue_Len50、PL_MeanValue_Len51、PL_MeanValue_Len5n等等。那么请问版主我怎么办才能在所有调用它的地方都调用同一个函数PL_MeanValue_Len50就行了呢?而且返回值还不回出错?经过实践证明,都调用相同的函数返回值会不对。那么我该怎么解决这个问题呢?请版主和大神支招!谢谢了!

/*循环渐进法求平均值*/
word PL_MeanValue_Len50 /*循环渐进法求平均值*/
(
        word         Input,
        byte        Par_Length,
        byte         Reset)
{
        word           count=0;
        static word           MidValue [50];
        word           Temp_Length;
        word           i;
        dword          Temp_Output;
volatile        word           Output;

if (Par_Length>50) {
        Temp_Length=50;}
else
        Temp_Length=Par_Length;
        if (Temp_Length<2)
                Temp_Length=2;
if (Reset)
        Output=Input;
else
        if (count<Temp_Length) {
                count=count+1;
                MidValue[count]=Input;
                Temp_Output=0;
                for(i=1;i<=count;i++)
                        {Temp_Output=Temp_Output+MidValue;}
                Output=(unsigned int)((float)(Temp_Output)/(float)(count));}
        else
                {for(i=1;i<=Temp_Length-1;i++ )
                        {MidValue=MidValue[i+1];}
                MidValue[Temp_Length]=Input;
                Temp_Output=0;
                for(i=1;i<=Temp_Length;i++)
                        {Temp_Output=Temp_Output+MidValue;}
                Output=(unsigned int)((float)(Temp_Output)/(float)(Temp_Length));
                return Output;
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。