(求助)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;
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
FSL_TICS_ZP
1楼-- · 2020-02-19 21:43
 精彩回答 2  元偷偷看……
jiang887786
2楼-- · 2020-02-19 21:56
FSL_TICS_ZP 发表于 2015-3-16 13:59
谢谢你的经验分享

版主,帮我看看怎么搞定这个问题呢?
FSL_TICS_ZP
3楼-- · 2020-02-20 01:52
jiang887786 发表于 2015-3-17 15:34
版主,帮我看看怎么搞定这个问题呢?

算法调用我不是太懂,我就说说我的理解吧。
你说多个地方调用同一个函数,但是返回值出错啊,我想是不是多个函数共同占有一个函数,导致得出错误的结果啊,
那么对应能不能像操作系统一样,对这个函数设置成exclusive,同一时间只服务一个调用函数呢

一周热门 更多>