嵌入式操作系统之辩——本地存储指针

Local Storage Pointer

本地存储指针

介绍

本地存储描述存储在对象本地的数据。就RTOS而言,他同城引用线程/任务本地存储(TLS),描述存储在任务控制块(TCB)中的数据。

本地存储指针

全局变量通常用于跨函数调用存储数据。如果有几个任务预先使用了写入相同的全局变量的代码,那么以前存储的数据可以在读取之前被覆盖。为了解决这个问题,TLS就像是任务私有的全局变量。这意味着每个任务都可以有其私有的“全局”变量,只有这个任务可以使用。从这个意义上说,TLS的使用促进了代码的可重用性,因为任务代码可以引用TLS来引用任务本地数据,而不是系统全局数据。此外,数据与任务之间的关联也更加清晰。

样例

例如,考虑一个具有多个PI控制器的系统来控制多个进程。每个PI控制器都包含一个积分器,必须存储该值,以便计算下一个控制器步骤。如下图显示了全局变量方法。结果显示,每个任务都需要访问全局变量空间中的正确积分值。因此,每个控制器任务都需要一个使用正确引用的具体实现。

具有全局变量的示例

Global Variables
Integrator1
Integrator2
Integrator3
Controller Task 1
Controller Task 2
Controller Task 3

如下图显示了相同的系统,但使用了TLS。每个控制器任务都可以有相同的控制算法去实现,即使用任务班底存储来引用其积分器值

使用TLS的示例

Controller task 1
Controller task 2
Controller task 3
Integrator1
Integrator2
Integrator3

本地存储指针是在通过任务或定时器参数结构创建任务或定时器时设置的。为了访问数据,可以通过 API 函数(pvTaskTLSObjectGet()、pvTimerTLSObjectGet())从 TCB 中检索本地存储指针,这些函数返回 void 指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值