【C语言】关键字——static

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、static是什么?

static是C语言中用来修饰变量和函数的关键字,可以改变其作用域,存储和链接等相关属性。

二、使用场景

1.局部变量

代码如下(示例):

   float kp = SpeedKP_Read/SPEEDPID_FACTOR1;         
   float ki = SpeedKI_Read/SPEEDPID_FACTOR2;          
   float kd = 0;
   uint16 lower = 500;
   uint16 upper = 9500;
   float32 uk=0 ;
   static sint32  error,error_integral,last_error=0;//sint16

   uk=u8DrvDuty;
   error = speed_ref- raw_speed;

   uk = (kp*error) + (ki* error_integral)+(kd*(error-last_error))+uk ;
   last_error = error;
   error_integral += error;

     if (uk >= upper)
     {
         uk = upper;
     }
     else if (uk <= lower)
     {
         uk  = lower;
     }
     else
     {

     }
     return uk;

该处是电机速度PID的控制代码,其中变量error_integral是用来进行积分计算的,需要它出了作用域依然存在,到程序结束,生命周期才结束。因此,我们需要使用static关键字修饰它,改变它的生命周期,使它成为静态变量,存储在静态区

2.全局变量

代码如下(示例):

static CanNmAlarmType tTimeoutAlarm;
static CanNmAlarmType tWBSAlarm;
static CanNmAlarmType tCycleAlarm;
static CanNmAlarmType tFirstAppAlarm;
static CanNmAlarmType tCycleAppAlarm;
static CanNmAlarmType tImmMsgTransAlarm;
static CanNmAlarmType tRepeatMessageAlarm;

该处是用于CAN 网络管理的代码,用static修饰这几个结构体变量,使其只能在本源文件内使用,不能在其他源文件内使用,使其模块化(“防止别人看到我们的源文件代码,别人只管用就好了”),同时使原来的外部链接属性变为内部链接属性


3.函数

代码如下(示例):

static void SetAlarm(CanNmAlarmType *alarm)
{
	alarm->work = 0;  /*must close alarm first*/
	alarm->time = 0;
	alarm->timeout = 0;
	alarm->work = 1;
}

static void CancelAlarm(CanNmAlarmType *alarm)
{
	alarm->work = 0;
	alarm->timeout = 0;
}

该处是CAN 网络管理中用于打开和关闭定时器的函数,用static修饰也是为了使其在本源文件内使用,不能在其他源文件内使用,同时使原来的外部链接属性变为内部链接属性。


总结

以上就是今天要讲的内容,本文仅仅简单介绍了static关键字的使用场景,以及在不同场景中起到的作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值