Local Storage Pointer
本地存储指针
介绍
本地存储描述存储在对象本地的数据。就RTOS而言,他同城引用线程/任务本地存储(TLS),描述存储在任务控制块(TCB)中的数据。
本地存储指针
全局变量通常用于跨函数调用存储数据。如果有几个任务预先使用了写入相同的全局变量的代码,那么以前存储的数据可以在读取之前被覆盖。为了解决这个问题,TLS就像是任务私有的全局变量。这意味着每个任务都可以有其私有的“全局”变量,只有这个任务可以使用。从这个意义上说,TLS的使用促进了代码的可重用性,因为任务代码可以引用TLS来引用任务本地数据,而不是系统全局数据。此外,数据与任务之间的关联也更加清晰。
样例
例如,考虑一个具有多个PI控制器的系统来控制多个进程。每个PI控制器都包含一个积分器,必须存储该值,以便计算下一个控制器步骤。如下图显示了全局变量方法。结果显示,每个任务都需要访问全局变量空间中的正确积分值。因此,每个控制器任务都需要一个使用正确引用的具体实现。
具有全局变量的示例
如下图显示了相同的系统,但使用了TLS。每个控制器任务都可以有相同的控制算法去实现,即使用任务班底存储来引用其积分器值
使用TLS的示例
本地存储指针是在通过任务或定时器参数结构创建任务或定时器时设置的。为了访问数据,可以通过 API 函数(pvTaskTLSObjectGet()、pvTimerTLSObjectGet())从 TCB 中检索本地存储指针,这些函数返回 void 指针。