打印

请教各位达人程序问题!(红色部分的作用)

[复制链接]
1485|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Periodic|  楼主 | 2011-12-16 13:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#define N       3
unsigned char p = 0;                            //队列指针
unsigned short buff[~((~0)<<N)+1] = {0};                  //环形队列存储空间
unsigned short sum = 0;                                   //初始和值
unsigned short aver = 0;                                  //初始平均值
unsigned short ADresult;                                  //保存AD采样结果

void TEST(void)
{

while(1)
{
        getad(&ADresult);                       //取得本次采样结果
        sum -= buff[p];                         //本句及下句,替换环形队列以及和值中最早的一个值
        sum += (buff[p]=ADresult);
        aver = (sum + (1<<(N-1)))>>N;           //移位代替除法求平均,整数运算,带四舍五入处理
        p++;                                    //队列指针移动
        p &= (unsigned char)(~((~0)<<N));       //只保留变量p的低N位,保证指针越界后能“环回”到0
}
}

相关帖子

沙发
123654789| | 2011-12-16 14:25 | 只看该作者
sum 减去buff里面 第p个数组的内容

使用特权

评论回复
板凳
Periodic|  楼主 | 2011-12-17 16:16 | 只看该作者
为什么要这样写
sum -= buff[p];                        //感觉这行是多余的
sum += (buff[p]=ADresult);

而不这样写sum += (buff[p]=ADresult);

使用特权

评论回复
地板
elife| | 2011-12-17 19:47 | 只看该作者
有必要的,不然sum会越来越大,把以前所有的结果都累加了。你一测试,就应该看出来了。

使用特权

评论回复
5
mohanwei| | 2011-12-18 08:09 | 只看该作者
buff[p]=ADresult执行在前……

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

670

帖子

2

粉丝