“ 最近一直在单片机项目上打转,也碰到了很多稀奇古怪的问题,在这里做个记录。”
01
—
变量
很多刚接触单片机嵌入式编程没有太多程序风格可言的程序员来说,变量的滥用以及命名的随意,导致在后期代码实际跑起来出现问题的时候,都不知道问题出在哪里,听到最多的回答就是"刚刚还是好好的,突然之间就卡死了"。
1、变量的命名
说实话每个人都有自己对变量以及函数名的命名习惯,但是个人认为名称这个东西应该是给人所见即所得的感觉,就是我看到名称就知道这个是干什么的,比如我要定义一个记录错误次数的变量errorCnt,可以使用驼峰式的书写方法,单驼峰或者双驼峰都可以。
2、变量的范围
单片机中常见的变量有全局变量、局部变量、静态局部变量、静态全局变量、易变变量。
全局变量:在整个工程文件内都有效;“在函数外定义的变量”,即从定义变量的位置到本源文件结束都有效。由于同一文件中的所有函数都能引用全局变量的值,因此如果在一个函数中改变了全局变量的值, 就能影响到其他函数中全局变量的值。
静态全局变量:只在定义它的文件内有效,效果和全局变量一样,不过就在本文件内部;
静态局部变量:只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;静态局部变量的生存期虽然为整个工程,但是其作用仍与局部变量相同,即只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。
局部变量:在定义它的函数内有效,但是函数返回后失效。“在函数内定义的变量”,即在一个函数内部定义的变量,只在本函数范围内有效。
注意:全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。局部变量的值不可知。
静态局部变量与全局变量最明显的区别就在于:全局变量在其定义后所有函数都能用,但是静态局部变量只能在一个函数里面用。
还有一个比较重要的是如果要在其他文件中引用另外文件的全局变量,需要用extern先对变量进行声明,声明的时候不要赋初值
不要初始化静态和全局变量为0(或NULL),让编译器来做
volatile变量:一个定义为volatile的变量是说这变量可能会被意想不到地改变&#x