本地存儲指針是RTOS中的一個重要特性,增強了任務管理和數(shù)據(jù)處理能力。在RTOS上下文中,本地存儲是指存儲在本地的特定任務或對象的數(shù)據(jù)。通常與任務本地存儲(Task Local Storage,TLS)有關,其中數(shù)據(jù)存儲在任務控制塊(TCB)中,允許每個任務具有私有的、特定于任務的變量。
本地存儲指針
全局變量通常用于函數(shù)間的數(shù)據(jù)傳遞。這可能會導致不同的任務修改同一變量,從而導致沖突。為了解決這個問題,通過TLS將全局變量作為任務私有變量使用,確保任務可以獨立地存儲和檢索自己的數(shù)據(jù)。通過將特定于任務的數(shù)據(jù)與系統(tǒng)范圍的變量分開來提高代碼的可重用性,從而使其更易于管理和維護。
示例
考慮一個有多個PI控制器來控制幾個過程的系統(tǒng),每個PI控制器包含一個積分器值,該值必須保存以供下一個控制器步驟計算。圖1顯示了通過全局變量實現(xiàn)的方法,該方法需要特定的引用來確保每個任務訪問正確的數(shù)據(jù),從而使實現(xiàn)更加復雜。

圖1 使用全局變量
圖2顯示了使用了TLS的相同系統(tǒng)實現(xiàn)。使用TLS,每個任務都可以使用自己的本地存儲來引用積分器值。該方式簡化了代碼,每個任務直接管理自己的數(shù)據(jù),使其更容易擴展和維護。

圖2 使用TLS
SAFERTOS中的本地存儲指針
為了允許應用設計人員靈活使用的本地存儲接口,SAFERTOS將其實現(xiàn)為一個void類型指針,稱為本地存儲指針。每個任務(定時器)都可以在任務或定時器控制塊中存儲自己唯一的數(shù)據(jù)對象。
SAFERTOS中的void指針允許應用程序設計人員根據(jù)任務的需要存儲任何類型的數(shù)據(jù),無論是簡單的數(shù)組還是更復雜的數(shù)據(jù)結構。
數(shù)據(jù)的存儲方式取決于數(shù)據(jù)長度和應用程序設計。void指針的長度取決于體系結構,在32位體系結構中,void指針的長度為32位或者4個字節(jié)。這意味著如果TLS中存儲的數(shù)據(jù)長度為4字節(jié)或以下,可以直接保存在存儲指針中。如果超過4字節(jié)數(shù),通過指針引用預分配的內存塊(SAFERTOS不允許動態(tài)內存分配)。
本地存儲指針在任務或定時器創(chuàng)建時設置,可以使用特定的API函數(shù)(pvTaskTLSObjectGet(), pvTimerTLSObjectGet())訪問數(shù)據(jù)。
本地存儲指針為SAFERTOS中提供了一種高度靈活的方式來管理特定于任務的數(shù)據(jù),從而生成更干凈、易于維護的代碼。通過TLS,任務可以管理自己的數(shù)據(jù),而不必擔心全局狀態(tài),從而減少沖突的風險,提高應用程序的整體效率。
麥克泰技術是安全預認證操作系統(tǒng)SAFERTOS在中國的代理商,具有超過20年嵌入式實時操作系統(tǒng)和功能安全軟件服務的市場、服務和培訓經驗,聯(lián)系info@bmrtech.com。
-
控制器
+關注
關注
114文章
17786瀏覽量
193059 -
嵌入式
+關注
關注
5198文章
20438瀏覽量
333955 -
函數(shù)
+關注
關注
3文章
4417瀏覽量
67499 -
指針
+關注
關注
1文章
484瀏覽量
71843 -
RTOS
+關注
關注
25文章
866瀏覽量
122969
原文標題:RTOS中的本地存儲指針使用
文章出處:【微信號:麥克泰技術,微信公眾號:麥克泰技術】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
RTOS信號量、隊列通信原理
RTOS的存儲器選擇
C編程中的指針:什么是指針,它做什么?
指數(shù)指針的相關知識
為什么使用指針?C++中的“指針”
本地存儲與云存儲的區(qū)別介紹
一文知道32位指針內部區(qū)域尋址
如何使用函數(shù)指針?
基于RTOS的應用進程中的典型線程
RTOS中的本地存儲指針使用
評論