打印

static在这里是什么作用

[复制链接]
4823|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
victor3l|  楼主 | 2012-7-7 11:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个去极值滑动滤波
ulong FilterDatChOne()//去极值滑动滤波
{
uchar  i;
static xdata  ulong datBuf[10] = {0};//经实践验证:这里必须是static才能计算出平均值,否则这里就不能计算。
xdata  ulong max = 0;
xdata  ulong min = 0;
xdata  ulong sum = 0;
datBuf[0] = RdChOne();
max = datBuf[0];
min = datBuf[0];
sum = datBuf[0];
for(i = 9; i != 0; i--)
{
  if(datBuf[i] > max)
   max = datBuf[i];
  else if(datBuf[i] < min)
   min = datBuf[i];
  sum = sum + datBuf[i];
  datBuf[i] = datBuf[i-1];
}

i = 10-2;//这里主要是为了四舍五入
sum = sum -max-min+i/2;
sum = (sum >> 3);//这里是求平均值
return sum;
}
static xdata  ulong datBuf[10] = {0};//经实践验证:这里必须是static才能计算
为什么作为暂存数据的队列前面必须是static。否则就不能算出平均值啊?

相关帖子

沙发
joyme| | 2012-7-7 12:09 | 只看该作者
dataBuf设为static可以保留最近10次采样的值,这样取平均值才有意义。
如果没有前面采样的值,还算什么平均值?

不过程序还需要做一下处理,即最开始dataBuf没填满之前不能这么简单算,否则平均值是错误的,比如第一次只有dataBuf[0]有值,其他为0,也去除以8就错了

使用特权

评论回复
板凳
amwrdfe| | 2012-7-7 12:16 | 只看该作者
static,
这个坑是我的,谁也别想用。
没有这个,
谁都可以进这个数组空间放个屁。

使用特权

评论回复
地板
chenbb8| | 2012-7-7 22:10 | 只看该作者
:L静态数组,LZ需要好好的恶补C语言

使用特权

评论回复
5
shell.albert| | 2012-7-8 10:25 | 只看该作者
static保留上一次计算的值

使用特权

评论回复
6
tsbgood| | 2012-7-8 20:27 | 只看该作者
static所定义的变量,在生命期上具有全局变量的特性;从作用域上,只有局部变量的特性;在所定义的函数内部可见,其他函数不可见。即static定义的变量,在所定义函数访问时,变量保存着上次操作的结果,其他以外的函数不可访问。

使用特权

评论回复
7
sedatefire| | 2012-7-8 21:10 | 只看该作者
xdata的静态数组,最好有个初始化的地方,不然后期随着代码的维护更改,不小心就要悲剧
static上电默认为0,在xdata里面只是个传说,因为编译器不帮忙生成上电初始化代码的

使用特权

评论回复
8
memorybox| | 2012-7-8 21:47 | 只看该作者
xdata的静态数组,最好有个初始化的地方,不然后期随着代码的维护更改,不小心就要悲剧
static上电默认为0,在xdata里面只是个传说,因为编译器不帮忙生成上电初始化代码的 ...
sedatefire 发表于 2012-7-8 21:10

到位,同意。

使用特权

评论回复
9
gogogobomb| | 2012-7-8 22:06 | 只看该作者
恩,学习了。

使用特权

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

本版积分规则

77

主题

308

帖子

5

粉丝