提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、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_integra
l是用来进行积分计算的,需要它出了作用域依然存在,到程序结束,生命周期才结束。因此,我们需要使用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关键字的使用场景,以及在不同场景中起到的作用。