本地存儲指針是RTOS中的一個重要特性,增強(qiáng)了任務(wù)管理和數(shù)據(jù)處理能力。在RTOS上下文中,本地存儲是指存儲在本地的特定任務(wù)或?qū)ο蟮臄?shù)據(jù)。通常與任務(wù)本地存儲(Task Local Storage,TLS)有關(guān),其中數(shù)據(jù)存儲在任務(wù)控制塊(TCB)中,允許每個任務(wù)具有私有的、特定于任務(wù)的變量。
本地存儲指針
全局變量通常用于函數(shù)間的數(shù)據(jù)傳遞。這可能會導(dǎo)致不同的任務(wù)修改同一變量,從而導(dǎo)致沖突。為了解決這個問題,通過TLS將全局變量作為任務(wù)私有變量使用,確保任務(wù)可以獨立地存儲和檢索自己的數(shù)據(jù)。通過將特定于任務(wù)的數(shù)據(jù)與系統(tǒng)范圍的變量分開來提高代碼的可重用性,從而使其更易于管理和維護(hù)。
示例
考慮一個有多個PI控制器來控制幾個過程的系統(tǒng),每個PI控制器包含一個積分器值,該值必須保存以供下一個控制器步驟計算。圖1顯示了通過全局變量實現(xiàn)的方法,該方法需要特定的引用來確保每個任務(wù)訪問正確的數(shù)據(jù),從而使實現(xiàn)更加復(fù)雜。
圖1 使用全局變量
圖2顯示了使用了TLS的相同系統(tǒng)實現(xiàn)。使用TLS,每個任務(wù)都可以使用自己的本地存儲來引用積分器值。該方式簡化了代碼,每個任務(wù)直接管理自己的數(shù)據(jù),使其更容易擴(kuò)展和維護(hù)。
圖2 使用TLS
SAFERTOS中的本地存儲指針
為了允許應(yīng)用設(shè)計人員靈活使用的本地存儲接口,SAFERTOS將其實現(xiàn)為一個void類型指針,稱為本地存儲指針。每個任務(wù)(定時器)都可以在任務(wù)或定時器控制塊中存儲自己唯一的數(shù)據(jù)對象。
SAFERTOS中的void指針允許應(yīng)用程序設(shè)計人員根據(jù)任務(wù)的需要存儲任何類型的數(shù)據(jù),無論是簡單的數(shù)組還是更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。
數(shù)據(jù)的存儲方式取決于數(shù)據(jù)長度和應(yīng)用程序設(shè)計。void指針的長度取決于體系結(jié)構(gòu),在32位體系結(jié)構(gòu)中,void指針的長度為32位或者4個字節(jié)。這意味著如果TLS中存儲的數(shù)據(jù)長度為4字節(jié)或以下,可以直接保存在存儲指針中。如果超過4字節(jié)數(shù),通過指針引用預(yù)分配的內(nèi)存塊(SAFERTOS不允許動態(tài)內(nèi)存分配)。
本地存儲指針在任務(wù)或定時器創(chuàng)建時設(shè)置,可以使用特定的API函數(shù)(pvTaskTLSObjectGet(), pvTimerTLSObjectGet())訪問數(shù)據(jù)。
本地存儲指針為SAFERTOS中提供了一種高度靈活的方式來管理特定于任務(wù)的數(shù)據(jù),從而生成更干凈、易于維護(hù)的代碼。通過TLS,任務(wù)可以管理自己的數(shù)據(jù),而不必?fù)?dān)心全局狀態(tài),從而減少沖突的風(fēng)險,提高應(yīng)用程序的整體效率。
麥克泰技術(shù)是安全預(yù)認(rèn)證操作系統(tǒng)SAFERTOS在中國的代理商,具有超過20年嵌入式實時操作系統(tǒng)和功能安全軟件服務(wù)的市場、服務(wù)和培訓(xùn)經(jīng)驗,聯(lián)系[email protected]。
-
控制器
+關(guān)注
關(guān)注
114文章
16959瀏覽量
182839 -
嵌入式
+關(guān)注
關(guān)注
5138文章
19524瀏覽量
314697 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4367瀏覽量
64141 -
指針
+關(guān)注
關(guān)注
1文章
484瀏覽量
70990 -
RTOS
+關(guān)注
關(guān)注
24文章
840瀏覽量
120737
原文標(biāo)題:RTOS中的本地存儲指針使用
文章出處:【微信號:麥克泰技術(shù),微信公眾號:麥克泰技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
RTOS信號量、隊列通信原理

RTOS的存儲器選擇
C編程中的指針:什么是指針,它做什么?
指數(shù)指針的相關(guān)知識

為什么使用指針?C++中的“指針”
本地存儲與云存儲的區(qū)別介紹
一文知道32位指針內(nèi)部區(qū)域?qū)ぶ?/a>
如何使用函數(shù)指針?
指針是什么

基于RTOS的應(yīng)用進(jìn)程中的典型線程

評論