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

RTOS的存儲(chǔ)器選擇
k8s volume中的本地存儲(chǔ)和網(wǎng)絡(luò)存儲(chǔ)
C編程中的指針:什么是指針,它做什么?
指數(shù)指針的相關(guān)知識(shí)

為什么使用指針?C++中的“指針”
本地存儲(chǔ)與云存儲(chǔ)的區(qū)別介紹
本地對(duì)象存儲(chǔ)可以做什么用
一文知道32位指針內(nèi)部區(qū)域?qū)ぶ?/a>
二級(jí)指針和多級(jí)指針的定義形式
如何使用函數(shù)指針?
指針是什么

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

評(píng)論