本地存儲指針是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文章
17787瀏覽量
193068 -
嵌入式
+關注
關注
5198文章
20442瀏覽量
333962 -
函數
+關注
關注
3文章
4417瀏覽量
67499 -
指針
+關注
關注
1文章
484瀏覽量
71843 -
RTOS
+關注
關注
25文章
866瀏覽量
122970
原文標題:RTOS中的本地存儲指針使用
文章出處:【微信號:麥克泰技術,微信公眾號:麥克泰技術】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
RTOS的存儲器選擇
C編程中的指針:什么是指針,它做什么?
為什么使用指針?C++中的“指針”
本地存儲與云存儲的區別介紹
如何使用函數指針?
基于RTOS的應用進程中的典型線程
RTOS中的本地存儲指針使用
評論