老鸟对单片机全局变量常用用法(读写在2个独立函数中)
最近,我在看以前同事写的单片机程序,我发现一个比较有趣的现象,记录下来,将来自己写代码的时候也可仿照。
(1)全局变量的写和读是在不同函数中处理的,而且从整个架构看,写的函数和读的函数不断循环被调用,例如在定时器中断服务函数或者主循环中。也就是单独一个函数完成了全局变量的写入,另外一个单独的函数通过不断读取全局变量的值,完成其他动作。从宏观上看,不断地在处理全局变量。这也是高手和新手之间的区别。新手习惯将全局变量的写和读都放到一个函数中;而老手习惯分成2个独立的函数,一个负责写入有效数值,另外一个负责读取有效数值。
(2)这样写的弊端就是,阅读代码不容易看懂,因为看到全局变量写入后,不知道什么时候去读它,就算通过调用关系或者搜素找到了,也需要追踪读全局变量函数在那个地方被调用的。
(3)读写在各自函数中,影响的事实时性,但是宏观上看是一旦写入有效值,马上得到处理。
(4)在读函数中应用了大量判断语句,如果不满足,本次循环就直接跳过了,只有判断语句条件满足时才运行。
(5)整个程序,从宏观上看是由好多个循环构成的:主循环、正在运行的中断服务函数、挂起态(Pending)中断服务函数。
(6)读写在各自独立函数的一个重要前提是2个函数能够得到不断地调用(可能是在某个分支中被有条件的被调用)。
(7)细品一下运行态(Running)、挂起态(Pending)的概念,也就是当某个条件满足时,函数得到运行,也就是该函数处于运行态。当某个函数没有得到运行,也就是该函数处于挂起态,只有条件满足时才会转换为运行态。