嵌入式 > 嵌入式开发 > 详情

关于C语言的static 又涨姿势了

发布时间:2025-07-18 发布时间:
|
最近学习一段代码,关于求平均值过滤的,过去使用时,一般是这样算,先一下子读出10个值来,求和再除以10,然后返回平均值。

今天学到了一种新的求平均值法,不用一下子读出10个来,而是正常读,只不过是以前读的都会记录保存下来,然后通过移位来更新这10个数据,

简单来说 如果 采集的数据为(2.0,2.1,2.5,2.3,2.5,2.2,2.5,2.6,5.9,2.7),那么下次采集为 2.5,那么就会将2.0丢掉,2.1为第一位,依次移位实现数据的更新。感觉巧妙之级。

这种方法的代码实现如下‘

/*******************************************************************************
* Function Name : static int _filter(int m)
* Description :
* Input :
* Output : None
* Return :
* Attention : None
*******************************************************************************/
static int _filter(int m)
{
static int flag_first = 0, _buff[10], sum;
const int _buff_max = 10;
int i;

if(flag_first == 0)
{
flag_first = 1;

for(i = 0, sum = 0; i < _buff_max; i++)
{
_buff[i] = m;
sum += _buff[i];
}
return m;
}
else
{
sum -= _buff[0];
for(i = 0; i < (_buff_max - 1); i++)
{
_buff[i] = _buff[i + 1];
}
_buff[9] = m;
sum += _buff[9];

i = sum / 10.0;
return i;
}
}

一开始以为 else 后边的不会执行,后来我错了。

static有一个特点

特点: static局部变量的”记忆性”与生存期的”全局性”
所谓”记忆性”是指在两次函数调用时, 在第二次调用进入时, 能保持第一次调用退出时的值.
示例程序一
#include



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
计算机控制系统接地技术