0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式RTOS的 任務(wù)棧 和 系統(tǒng)棧

矜辰所致 ? 來(lái)源:矜辰所致 ? 作者:矜辰所致 ? 2023-05-16 09:57 ? 次閱讀
對(duì)于初學(xué)者來(lái)說(shuō),對(duì)于RTOS經(jīng)常提到的任務(wù)棧和我們裸機(jī)編程說(shuō)的棧經(jīng)常傻傻分不清楚
雖然我其他博文在有些地方提到過(guò)他們的區(qū)別,但還是單獨(dú)寫一篇文章描述一下

總結(jié)

總結(jié)寫在前面:

FreeRTOS 任務(wù)棧 和 系統(tǒng)棧完全是兩個(gè)不同的東西,在內(nèi)存中的體現(xiàn)就是他們占用的是完全不同的內(nèi)存區(qū)域。

FreeRTOS 的所有任務(wù)是在 FreeRTOS 最開始申請(qǐng)的內(nèi)存一大片空間上面TOTAL_HEAP_SIZE,再次給每個(gè)任務(wù)分配不同的小空間,這每個(gè)不同的小空間就是FreeRTOS 每個(gè)任務(wù)的任務(wù)棧,在RAM空間中,F(xiàn)reeRTOS申請(qǐng)的這大片空間屬于.bss段。而系統(tǒng)棧,我們申請(qǐng)的_Min_Stack_Size在RAM空間中,位置是在最后的部分,按照順序排列.data-.bss-Heap-Stack。

FreeRTOS 每個(gè)任務(wù)都有自己?jiǎn)为?dú)的??臻g,就是創(chuàng)建任務(wù)時(shí)候設(shè)置的大小,這個(gè)大小在內(nèi)存中直接對(duì)應(yīng)一篇內(nèi)存空間 ,用來(lái)在任務(wù)切換的時(shí)候保存當(dāng)前任務(wù)現(xiàn)場(chǎng)的內(nèi)存空間,每一個(gè)任務(wù)都有一個(gè)自己的PSP指針。

系統(tǒng)棧 也是用來(lái)保存現(xiàn)場(chǎng)的,但是他用于 中斷,庫(kù)函數(shù)調(diào)用(比如C庫(kù)函數(shù)),所有的中斷都使用同一個(gè)??臻g,對(duì)于系統(tǒng)棧來(lái)說(shuō),他們使用的都是MSP指針。

額外說(shuō)明,本文是以 FreeRTOS 為例,在 RT-Thread 系統(tǒng)中,不會(huì)預(yù)先定義堆的大小,他會(huì)把 .data 段 以及 系統(tǒng) stack 占用的剩余所有空間都作為 堆,這個(gè)堆并不是系統(tǒng)堆,這個(gè)堆是受 RT-Thread 管理的"內(nèi)存堆",RT-Thread 線程,申請(qǐng)動(dòng)態(tài)空間都在這個(gè)內(nèi)存堆空間中進(jìn)行,統(tǒng)一管理。

1、占用空間的區(qū)別

下面來(lái)介紹一下,先來(lái)看一張圖:

圖片.png

結(jié)合開頭的總結(jié),從上圖可以看出來(lái),F(xiàn)reeRTOS 的任務(wù)棧 和 系統(tǒng)棧 在RAM中的位置就是不一樣的,如果跑的是裸機(jī)程序,上圖中的 FreeRTOS任務(wù)空間 那部分的空間是沒有的,其他部分還是一樣的,如下圖:

圖片.png

為什么是上面圖示的樣子,不理解的朋友先查看我另一篇博文關(guān)于內(nèi)存問題的單獨(dú)介紹 :《STM32的內(nèi)存管理相關(guān)(內(nèi)存架構(gòu),內(nèi)存管理,map文件分析)》,發(fā)燒友的小伙伴需要等等,我有時(shí)間也會(huì)發(fā)表到發(fā)燒友這邊。

我們也可以直接查看程序編譯后的 .map文件來(lái)證實(shí)上面的圖片,我們先找到RAM區(qū)域,能看到和FreeRTOS有關(guān)的函數(shù)啊數(shù)據(jù)啊,所占用的RAM空間地址:

圖片.png

在.map文件的最后,有系統(tǒng)棧 的地址:

圖片.png

其實(shí)上面的圖示就很好的告訴了我們,系統(tǒng)棧就是系統(tǒng)棧,F(xiàn)reeRTOS 任務(wù)棧先不管他是怎么運(yùn)作的,不管他是什么機(jī)制,在RAM里面 和系統(tǒng)棧的位置都不一樣,完全是兩個(gè)東西。

2、用途的區(qū)別

所謂棧,就是用來(lái)保存“現(xiàn)場(chǎng)”的東西。

FreeRTOS 的 任務(wù)棧

每個(gè)任務(wù)都有自己的??臻g,用來(lái)保存每個(gè)任務(wù)自己的現(xiàn)場(chǎng)。 函數(shù)總有被打斷的時(shí)候,可能是中斷來(lái)了,也可能是任務(wù)調(diào)度,也可能是自己調(diào)用函數(shù),這些情況都需要保存自己的現(xiàn)場(chǎng),就需要用到自己的任務(wù)棧。

(具體的分析,需要講一大堆,在我其他的博文有些章節(jié)其實(shí)會(huì)有細(xì)說(shuō)過(guò)相關(guān)知識(shí),有時(shí)間的話,這里再來(lái)補(bǔ)充下)

系統(tǒng)棧

在裸機(jī)編程中,所有的“現(xiàn)場(chǎng)”保存都是用的系統(tǒng)棧,不管函數(shù)的調(diào)用,中斷,中斷嵌套。

在FreeRTOS中,中斷使用的是系統(tǒng)棧。每一個(gè)systick 中斷都會(huì)使用到系統(tǒng)棧。

以下是個(gè)人理解,在系統(tǒng)中,只要開始了任務(wù)調(diào)度,除了中斷,所有的調(diào)用,肯定都是在任務(wù)中進(jìn)行的,只要在任務(wù)中進(jìn)行,那么所有的函數(shù)調(diào)用需要保存的都是各個(gè)任務(wù)的現(xiàn)場(chǎng),是用的任務(wù)棧。只有發(fā)生中斷的時(shí)候用的是系統(tǒng)棧。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • RTOS
    +關(guān)注

    關(guān)注

    22

    文章

    817

    瀏覽量

    119769
  • ??臻g
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    5465
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    嵌入式系統(tǒng)中USB-HOST協(xié)議該如何設(shè)計(jì)?

    USB協(xié)議的基本知識(shí)包括哪些?嵌入式系統(tǒng)中USB-HOST協(xié)議該如何設(shè)計(jì)?
    發(fā)表于 04-27 07:10

    嵌入式網(wǎng)絡(luò)協(xié)議基礎(chǔ)知識(shí)

    第2章 嵌入式網(wǎng)絡(luò)協(xié)議基礎(chǔ)知識(shí)本章教程為大家介紹嵌入式網(wǎng)絡(luò)協(xié)議基礎(chǔ)知識(shí),本章先讓大家有一個(gè)全面的認(rèn)識(shí),后面章節(jié)中會(huì)為大家逐一講解用到的協(xié)議。基礎(chǔ)知識(shí)整理自百度百科,wiki百科等。
    發(fā)表于 08-03 06:24

    介紹嵌入式網(wǎng)絡(luò)協(xié)議基礎(chǔ)知識(shí)

    第2章 嵌入式網(wǎng)絡(luò)協(xié)議基礎(chǔ)知識(shí)本章教程為大家介紹嵌入式網(wǎng)絡(luò)協(xié)議基礎(chǔ)知識(shí),本章先讓大家有一個(gè)全面的認(rèn)識(shí),后面章節(jié)中會(huì)為大家逐一講解用到的協(xié)議?;A(chǔ)知識(shí)整理自百度百科,wiki百科等。
    發(fā)表于 08-04 08:17

    LwIP協(xié)議開發(fā)嵌入式網(wǎng)絡(luò)的三種方法有何關(guān)系

    LwIP協(xié)議開發(fā)嵌入式網(wǎng)絡(luò)的三種方法分析 輕量級(jí)的TCP/IP協(xié)議LwIP,提供了三種應(yīng)用程序設(shè)計(jì)方法,且很容易被移植到多任務(wù)的操作系統(tǒng)
    發(fā)表于 08-05 07:55

    什么是嵌入式網(wǎng)絡(luò)協(xié)議

    什么是嵌入式網(wǎng)絡(luò)協(xié)議
    發(fā)表于 10-13 07:33

    什么是嵌入式網(wǎng)絡(luò)協(xié)議

    什么是嵌入式網(wǎng)絡(luò)協(xié)議
    發(fā)表于 10-13 09:26

    什么是嵌入式網(wǎng)絡(luò)協(xié)議

    什么是嵌入式網(wǎng)絡(luò)協(xié)議
    發(fā)表于 10-13 08:42

    什么是堆?什么是

    嵌入式編程中,是一個(gè)很重要的概念,不管是裸機(jī)編程還是基于RTOS編程。函數(shù)形參、局部變量、函數(shù)調(diào)用現(xiàn)場(chǎng)的保護(hù)及返回地址、中斷函數(shù)執(zhí)行前線程保護(hù)及中斷嵌套的現(xiàn)場(chǎng)的保護(hù)都依賴于空間。
    發(fā)表于 12-22 06:09

    主流的小型嵌入式網(wǎng)絡(luò)協(xié)議

    新產(chǎn)品、新技術(shù)也是層出不窮,本章節(jié)就為大家介紹當(dāng)前主流的小型嵌入式網(wǎng)絡(luò)協(xié)議。目錄第1章 當(dāng)前主流的小型嵌入式網(wǎng)絡(luò)協(xié)議1.1 當(dāng)前主流的嵌入式
    發(fā)表于 12-23 06:18

    為什么嵌入式軟件系統(tǒng)很難評(píng)估出所需的實(shí)際大?。?/a>

    為什么嵌入式軟件系統(tǒng)很難評(píng)估出所需的實(shí)際大???的原理為什么嵌入式軟件系統(tǒng)很難評(píng)估出所需
    發(fā)表于 12-24 07:53

    嵌入式VxWorks網(wǎng)絡(luò)協(xié)議的Mutiplexer接口及其使用方法

    嵌入式系統(tǒng)網(wǎng)絡(luò)協(xié)議的靈活性在應(yīng)用上是一個(gè)重要指標(biāo)。介紹嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks網(wǎng)絡(luò)協(xié)議
    發(fā)表于 04-09 10:00 ?10次下載

    嵌入式TCPIP協(xié)議LWIP的內(nèi)部結(jié)構(gòu)

    分析了嵌入式 TCPIP協(xié)議主要對(duì)LWIP的基本結(jié)構(gòu),介紹了嵌入式TCPIP協(xié)議LWIP的內(nèi)存管理方式,同時(shí)給出了對(duì)UDP、TCP、IP等協(xié)議的處理方法,最后給出了LWlP的應(yīng)用層
    發(fā)表于 02-17 15:55 ?76次下載
    <b class='flag-5'>嵌入式</b>TCPIP協(xié)議<b class='flag-5'>棧</b>LWIP的內(nèi)部結(jié)構(gòu)

    嵌入式小型TCPIP協(xié)議

    一個(gè)專為嵌入式系統(tǒng)編寫的小型TCP/IP協(xié)議 TCP/IPLean
    發(fā)表于 10-08 17:23 ?50次下載

    一個(gè)專為嵌入式系統(tǒng)編寫的小型TCP IP協(xié)議

    一個(gè)專為嵌入式系統(tǒng)編寫的小型TCP IP協(xié)議
    發(fā)表于 02-08 01:38 ?17次下載

    基于USB嵌入式主機(jī)

    基于USB嵌入式主機(jī)
    發(fā)表于 10-31 08:52 ?4次下載
    基于USB<b class='flag-5'>嵌入式</b>主機(jī)<b class='flag-5'>棧</b>