C语言开发单片机为啥都是全局变量形式?
前言
做控制的工程师特点
float SetSpeed;
float err;
float err_last;
float Kp,Ki,Kd;
float integral;
float result;
float PID(float speed)
{
err=SetSpeed-speed;
integral+=err;
result=Kp*err+Ki*integral+Kd*(err-err_last);
err_last=err;
return result;
}
做非嵌入式的软件工程师特点
总结
-
如果只是文件内调用,全局变量只能写在这个.c文件里,不要写进.h文件。 -
如果有文件外调用,全局变量要写在.h文件里。 -
.h里面的全局变量全局可读,但是只有本文件组可以写。别的文件要写请调用set函数。 -
所有的全局变量无论在.h还是.c里面都要包成同名struct。哪怕只有一个变量也要写进struct里面。比如PID.c里面有一个pid_S,PID.h里面有个PID_S。这样其他人不仅可以立即识别出一个变量是project内global/文件内static/函数内local,同时还能轻松追溯到这个函数是属于哪个文件的。 -
不要写函数内的static变量。函数内的static变量在实际的项目中几乎就是bug生成器,没法简单的reset。而且对unit test非常不友好。