<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

嵌入式RTOS的 任務棧 和 系統棧

矜辰所致 ? 來源:矜辰所致 ? 作者:矜辰所致 ? 2023-05-16 09:57 ? 次閱讀
對于初學者來說,對于RTOS經常提到的任務棧和我們裸機編程說的棧經常傻傻分不清楚
雖然我其他博文在有些地方提到過他們的區別,但還是單獨寫一篇文章描述一下

總結

總結寫在前面:

FreeRTOS 任務棧 和 系統棧完全是兩個不同的東西,在內存中的體現就是他們占用的是完全不同的內存區域。

FreeRTOS 的所有任務是在 FreeRTOS 最開始申請的內存一大片空間上面TOTAL_HEAP_SIZE,再次給每個任務分配不同的小空間,這每個不同的小空間就是FreeRTOS 每個任務的任務棧,在RAM空間中,FreeRTOS申請的這大片空間屬于.bss段。而系統棧,我們申請的_Min_Stack_Size在RAM空間中,位置是在最后的部分,按照順序排列.data-.bss-Heap-Stack。

FreeRTOS 每個任務都有自己單獨的??臻g,就是創建任務時候設置的大小,這個大小在內存中直接對應一篇內存空間 ,用來在任務切換的時候保存當前任務現場的內存空間,每一個任務都有一個自己的PSP指針。

系統棧 也是用來保存現場的,但是他用于 中斷,庫函數調用(比如C庫函數),所有的中斷都使用同一個??臻g,對于系統棧來說,他們使用的都是MSP指針。

額外說明,本文是以 FreeRTOS 為例,在 RT-Thread 系統中,不會預先定義堆的大小,他會把 .data 段 以及 系統 stack 占用的剩余所有空間都作為 堆,這個堆并不是系統堆,這個堆是受 RT-Thread 管理的"內存堆",RT-Thread 線程,申請動態空間都在這個內存堆空間中進行,統一管理。

1、占用空間的區別

下面來介紹一下,先來看一張圖:

圖片.png

結合開頭的總結,從上圖可以看出來,FreeRTOS 的任務棧 和 系統棧 在RAM中的位置就是不一樣的,如果跑的是裸機程序,上圖中的 FreeRTOS任務空間 那部分的空間是沒有的,其他部分還是一樣的,如下圖:

圖片.png

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

我們也可以直接查看程序編譯后的 .map文件來證實上面的圖片,我們先找到RAM區域,能看到和FreeRTOS有關的函數啊數據啊,所占用的RAM空間地址:

圖片.png

在.map文件的最后,有系統棧 的地址:

圖片.png

其實上面的圖示就很好的告訴了我們,系統棧就是系統棧,FreeRTOS 任務棧先不管他是怎么運作的,不管他是什么機制,在RAM里面 和系統棧的位置都不一樣,完全是兩個東西。

2、用途的區別

所謂棧,就是用來保存“現場”的東西。

FreeRTOS 的 任務棧

每個任務都有自己的??臻g,用來保存每個任務自己的現場。 函數總有被打斷的時候,可能是中斷來了,也可能是任務調度,也可能是自己調用函數,這些情況都需要保存自己的現場,就需要用到自己的任務棧。

(具體的分析,需要講一大堆,在我其他的博文有些章節其實會有細說過相關知識,有時間的話,這里再來補充下)

系統棧

在裸機編程中,所有的“現場”保存都是用的系統棧,不管函數的調用,中斷,中斷嵌套。

在FreeRTOS中,中斷使用的是系統棧。每一個systick 中斷都會使用到系統棧。

以下是個人理解,在系統中,只要開始了任務調度,除了中斷,所有的調用,肯定都是在任務中進行的,只要在任務中進行,那么所有的函數調用需要保存的都是各個任務的現場,是用的任務棧。只有發生中斷的時候用的是系統棧。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RTOS
    +關注

    關注

    20

    文章

    776

    瀏覽量

    118841
  • ??臻g
    +關注

    關注

    0

    文章

    5

    瀏覽量

    5411
收藏 人收藏

    評論

    相關推薦

    基于TCP IP協議嵌入式以太網終端設計

    / IP協議嵌入式以太網終端的設計方案。該方案給出了ARM內核的微處理器S3C44B0X和以太網控制器芯片RTL8019AS的接口電路以及嵌入式TCP / IP和μC/OS -
    發表于 06-27 09:33

    第1章 當前主流的小型嵌入式網絡協議

    轉最新資料這幾年物聯網發展迅猛,各種新產品、新技術也是層出不窮,本章節就為大家介紹當前主流的小型嵌入式網絡協議。1.1 當前主流的嵌入式網絡協議1.2 uIP網絡協議
    發表于 10-11 21:11

    嵌入式SIP協議怎么設計?

    ,憑借SIP自身的特性可有效提高嵌入式網絡設備的互操作性和接入網絡的便利性。但SIP協議本身只給出SIP消息的文法定義以及自然語言描述的消息處理,并未給出SIP協議的實現機制。這里討論在嵌入式終端設備上建立
    發表于 10-29 08:14

    嵌入式系統中USB-HOST協議該如何設計?

    USB協議的基本知識包括哪些?嵌入式系統中USB-HOST協議該如何設計?
    發表于 04-27 07:10

    嵌入式網絡協議基礎知識

    第2章 嵌入式網絡協議基礎知識本章教程為大家介紹嵌入式網絡協議基礎知識,本章先讓大家有一個全面的認識,后面章節中會為大家逐一講解用到的協議?;A知識整理自百度百科,wiki百科等。
    發表于 08-03 06:24

    介紹嵌入式網絡協議基礎知識

    第2章 嵌入式網絡協議基礎知識本章教程為大家介紹嵌入式網絡協議基礎知識,本章先讓大家有一個全面的認識,后面章節中會為大家逐一講解用到的協議?;A知識整理自百度百科,wiki百科等。
    發表于 08-03 06:58

    介紹嵌入式網絡協議基礎知識

    第2章 嵌入式網絡協議基礎知識本章教程為大家介紹嵌入式網絡協議基礎知識,本章先讓大家有一個全面的認識,后面章節中會為大家逐一講解用到的協議?;A知識整理自百度百科,wiki百科等。
    發表于 08-04 08:17

    LwIP協議開發嵌入式網絡的三種方法有何關系

    LwIP協議開發嵌入式網絡的三種方法分析 輕量級的TCP/IP協議LwIP,提供了三種應用程序設計方法,且很容易被移植到多任務的操作系統
    發表于 08-05 07:55

    什么是嵌入式網絡協議

    什么是嵌入式網絡協議
    發表于 10-13 07:33

    什么是嵌入式網絡協議

    什么是嵌入式網絡協議
    發表于 10-13 09:26

    什么是嵌入式網絡協議

    什么是嵌入式網絡協議
    發表于 10-13 08:42

    嵌入式知識體系相關資料分享

    嵌入式是一門交叉學科。一個嵌入式電子產品(比如手機)從底層到上層,一般會涉及半導體芯片、電子電路、計算機、操作系統、多媒體等不同專業領域的知識。很多從事嵌入式開發的朋友,通常來自不同的
    發表于 12-17 06:22

    什么是堆?什么是

    嵌入式編程中,是一個很重要的概念,不管是裸機編程還是基于RTOS編程。函數形參、局部變量、函數調用現場的保護及返回地址、中斷函數執行前線程保護及中斷嵌套的現場的保護都依賴于空間。
    發表于 12-22 06:09

    主流的小型嵌入式網絡協議

    新產品、新技術也是層出不窮,本章節就為大家介紹當前主流的小型嵌入式網絡協議。目錄第1章 當前主流的小型嵌入式網絡協議1.1 當前主流的嵌入式
    發表于 12-23 06:18

    為什么嵌入式軟件系統很難評估出所需的實際大???

    為什么嵌入式軟件系統很難評估出所需的實際大???的原理為什么嵌入式軟件系統很難評估出所需
    發表于 12-24 07:53
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>