关于STM32单片机编程中大量使用全局变量而非使用函数调用的一些思考
背景:
最近我在看我以前2个同事写的STM32单片机程序,两个同事都使用了多任务编程,一个同事使用的是freeRTOS,另外一个同事使用的是裸机+定时器方式,我发现他们两者写程序的一些规律,现在记录下来,以便后面自己写代码的时候使用。
(1)单个任务是由全局变量+写读这些全局变量的函数组成的。整个项目分成了多个任务,每一个任务都是负责各自的工作,具体表现为定义一些结构体类型来描述自然或者现实中的事物,然后定义对应全局变量,通过调用该任务相关函数实现具体操作,具体表现为全局变量的读写操作。
(2)任务与任务之间如果需要通信的话,是通过读取对应任务的具体数值,然后进行判断,如果满足某条件则运行某些代码,如果满足其他条件则运行另外代码。这里需要注意的是,我两个同事都是直接去读取全局变量的值,而不是通过定义并调用某些接口函数。我这两天一直在思考这个问题,为什么使用全局变量而非使用接口函数呢?我感觉主要有以下几个原因。
<1>、STM32单片机代码的代码量不会太大,使用全局变量比使用接口函数更加便捷。接口函数首先需要定义函数、接口函数调用(参数传参)、接口函数声明等使用起来比较复杂。
<2>、IAR、keil MDK这些IDE支持debug调试功能,将全局变量添加到观察窗口更容易追踪问题的根源。
<3>、“代码的本质是一个数据处理器”,各个任务不断循环运行,根据不同情况最终表现为全局变量不同数据,这就是数据处理器的含义。也可以这样任务,函数运行的目的或者结果就是产生不同的数值并存储在全局变量中。因此,我在另外一个任务中去读取当前任务中的全局变量数值然后根据具体数值进行不同分支判断就可以。理论上,全局变量的不同数值代表运行了那些路子的代码,也代表具体发生了什么自然事件(具体情况)。