本地存储指针是RTOS中的一个重要特性,增强了任务管理和数据处理能力。在RTOS上下文中,本地存储是指存储在本地的特定任务或对象的数据。通常与任务本地存储(Task Local Storage,TLS)有关,其中数据存储在任务控制块(TCB)中,允许每个任务具有私有的、特定于任务的变量。
本地存储指针
全局变量通常用于函数间的数据传递。这可能会导致不同的任务修改同一变量,从而导致冲突。为了解决这个问题,通过TLS将全局变量作为任务私有变量使用,确保任务可以独立地存储和检索自己的数据。通过将特定于任务的数据与系统范围的变量分开来提高代码的可重用性,从而使其更易于管理和维护。
示例
考虑一个有多个PI控制器来控制几个过程的系统,每个PI控制器包含一个积分器值,该值必须保存以供下一个控制器步骤计算。图1显示了通过全局变量实现的方法,该方法需要特定的引用来确保每个任务访问正确的数据,从而使实现更加复杂。

图1 使用全局变量
图2显示了使用了TLS的相同系统实现。使用TLS,每个任务都可以使用自己的本地存储来引用积分器值。该方式简化了代码,每个任务直接管理自己的数据,使其更容易扩展和维护。

图2 使用TLS
SAFERTOS中的本地存储指针
为了允许应用设计人员灵活使用的本地存储接口,SAFERTOS将其实现为一个void类型指针,称为本地存储指针。每个任务(定时器)都可以在任务或定时器控制块中存储自己唯一的数据对象。
SAFERTOS中的void指针允许应用程序设计人员根据任务的需要存储任何类型的数据,无论是简单的数组还是更复杂的数据结构。
数据的存储方式取决于数据长度和应用程序设计。void指针的长度取决于体系结构,在32位体系结构中,void指针的长度为32位或者4个字节。这意味着如果TLS中存储的数据长度为4字节或以下,可以直接保存在存储指针中。如果超过4字节数,通过指针引用预分配的内存块(SAFERTOS不允许动态内存分配)。
本地存储指针在任务或定时器创建时设置,可以使用特定的API函数(pvTaskTLSObjectGet(), pvTimerTLSObjectGet())访问数据。
本地存储指针为SAFERTOS中提供了一种高度灵活的方式来管理特定于任务的数据,从而生成更干净、易于维护的代码。通过TLS,任务可以管理自己的数据,而不必担心全局状态,从而减少冲突的风险,提高应用程序的整体效率。
麦克泰技术是安全预认证操作系统SAFERTOS在中国的代理商,具有超过20年嵌入式实时操作系统和功能安全软件服务的市场、服务和培训经验,联系info@bmrtech.com。
-
控制器
+关注
关注
114文章
17638浏览量
190165 -
嵌入式
+关注
关注
5186文章
20142浏览量
328643 -
函数
+关注
关注
3文章
4406浏览量
66812 -
指针
+关注
关注
1文章
484浏览量
71669 -
RTOS
+关注
关注
25文章
862浏览量
122569
原文标题:RTOS中的本地存储指针使用
文章出处:【微信号:麦克泰技术,微信公众号:麦克泰技术】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
RTOS的存储器选择
C编程中的指针:什么是指针,它做什么?
为什么使用指针?C++中的“指针”
本地存储与云存储的区别介绍
如何使用函数指针?
基于RTOS的应用进程中的典型线程

RTOS中的本地存储指针使用
评论