色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

普通單片機與STM32單片機中堆棧的區別

STM32嵌入式開發 ? 來源:STM32嵌入式開發 ? 作者:STM32嵌入式開發 ? 2022-04-13 11:15 ? 次閱讀

學習STM32單片機的時候,總是能遇到“堆棧”這個概念。分享本文,希望對你理解堆棧有幫助。

對于了解一點匯編編程的人,就可以知道,堆棧是內存中一段連續的存儲區域,用來保存一些臨時數據:嵌入式開發中更接近底層的匯編與C語言。堆棧操作由PUSH、POP兩條指令來完成。而程序內存可以分為幾個區:

棧區(stack)

堆區(Heap)

全局區(static)

文字常亮區程序代碼

程序編譯之后,全局變量,靜態變量已經分配好內存空間,在函數運行時,程序需要為局部變量分配棧空間,當中斷來時,也需要將函數指針入棧,保護現場,以便于中斷處理完之后再回到之前執行的函數。

棧是從高到低分配,堆是從低到高分配。

普通單片機與STM32單片機中堆棧的區別

普通單片機啟動時,不需要用bootloader將代碼從ROM搬移到RAM

但是STM32單片機需要。

這里我們可以先看看單片機程序執行的過程,單片機執行分三個步驟:

取指令

分析指令

執行指令

根據PC的值從程序存儲器讀出指令,送到指令寄存器。然后分析執行執行。這樣單片機就從內部程序存儲器去代碼指令,從RAM存取相關數據。

RAM取數的速度是遠高于ROM的,但是普通單片機因為本身運行頻率不高,所以從ROM取指令慢并不影響。

而STM32的CPU運行的頻率高,遠大于從ROM讀寫的速度。所以需要用bootloader將代碼從ROM搬移到RAM。

使用棧就象我們去飯館里吃飯,只管點菜(發出申請)、付錢、和吃(使用),吃飽了就走,不必理會切菜、洗菜等準備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自由度小。使用堆就象是自己動手做喜歡吃的菜肴,比較麻煩,但是比較符合自己的口味,而且自由度大。

其實堆棧就是單片機中的一些存儲單元,這些存儲單元被指定保存一些特殊信息,比如地址(保護斷點)和數據(保護現場)。

如果非要給他加幾個特點的話那就是:

這些存儲單元中的內容都是程序執行過程中被中斷打斷時,事故現場的一些相關參數。如果不保存這些參數,單片機執行完中斷函數后就無法回到主程序繼續執行了。

這些存儲單元的地址被記在了一個叫做堆棧指針(SP)的地方。

結合STM32的開發講述堆棧

從上面的描述可以看得出來,在代碼中是如何占用堆和棧的。可能很多人還是無法理解,這里再結合STM32的開發過程中與堆棧相關的內容來進行講述。

如何設置STM32的堆棧大小?

在基于MDK的啟動文件開始,有一段匯編代碼是分配堆棧大小的。

普通單片機與STM32單片機中堆棧的區別

這里重點知道堆棧數值大小就行。還有一段AREA(區域),表示分配一段堆棧數據段。數值大小可以自己修改,也可以使用STM32CubeMX數值大小配置,如下圖所示。

普通單片機與STM32單片機中堆棧的區別

STM32F1默認設置值0x400,也就是1K大小。

Stack_Size EQU 0x400

函數體內局部變量:

void Fun(void){ char i; int Tmp[256]; //...}

局部變量總共占用了256*4 + 1字節的棧空間。所以,在函數內有較多局部變量時,就需要注意是否超過我們配置的堆棧大小。

函數參數:

void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)

這里要強調一點:傳遞指針只占4字節,如果傳遞的是結構體,就會占用結構大小空間。提示:在函數嵌套,遞歸時,系統仍會占用棧空間。

堆(Heap)的默認設置0x200(512)字節。

Heap_Size EQU 0x200

大部分人應該很少使用malloc來分配堆空間。雖然堆上的數據只要程序員不釋放空間就可以一直訪問,但是,如果忘記了釋放堆內存,那么將會造成內存泄漏,甚至致命的潛在錯誤。

MDK中RAM占用大小分析

經常在線調試的人,可能會分析一些底層的內容。這里結合MDK-ARM來分析一下RAM占用大小的問題。在MDK編譯之后,會有一段RAM大小信息:

普通單片機與STM32單片機中堆棧的區別

這里4+6=1640,轉換成16進制就是0x668,在進行在調試時,會出現:

普通單片機與STM32單片機中堆棧的區別

這個MSP就是主堆棧指針,一般我們復位之后指向的位置,復位指向的其實是棧頂:

普通單片機與STM32單片機中堆棧的區別

而MSP指向地址0x20000668是0x20000000偏移0x668而得來。具體哪些地方占用了RAM,可以參看map文件中【Image Symbol Table】處的內容:

普通單片機與STM32單片機中堆棧的區別

原文標題:詳解STM32單片機的堆棧

文章出處:【微信公眾號:STM32嵌入式開發】歡迎添加關注!文章轉載請注明出處。

審核編輯:湯梓紅

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

    關注

    6050

    文章

    44687

    瀏覽量

    641184
  • STM32
    +關注

    關注

    2276

    文章

    10947

    瀏覽量

    359166
  • 堆棧
    +關注

    關注

    0

    文章

    182

    瀏覽量

    19894

原文標題:詳解STM32單片機的堆棧

文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    詳解STM32單片機堆棧

    ,程序需要為局部變量分配棧空間,當中斷來時,也需要將函數指針入棧,保護現場,以便于中斷處理完之后再回到之前執行的函數。 棧是從高到低分配,堆是從低到高分配。普通單片機STM32單片機
    發表于 01-12 11:30

    ARM和單片機AVR的區別

    ARM和單片機AVR的區別 AVR單片機是ATMEL公司研制開發的一種新型單片機,它與51單片機
    發表于 04-23 14:10 ?3621次閱讀

    avr單片機stm32區別與優缺點分析

    摘要:avr單片機stm32單片機是目前使用較廣泛的單片機,那么avr單片機stm32
    發表于 12-10 10:31 ?10.7w次閱讀
    avr<b class='flag-5'>單片機</b>和<b class='flag-5'>stm32</b><b class='flag-5'>區別</b>與優缺點分析

    51單片機STM32單片機有哪些區別

    大部分朋友可能都知道51單片機stm32單片機也知道一般入門會先學習51單片機在學習stm32單片機
    發表于 08-13 17:32 ?17次下載
    51<b class='flag-5'>單片機</b>和<b class='flag-5'>STM32</b><b class='flag-5'>單片機</b>有哪些<b class='flag-5'>區別</b>

    什么是單片機堆棧單片機堆棧有什么作用和原理說明

    什么是單片機堆棧?在片內RAM,常常要指定一個專門的區域來存放某些特別的數據,它遵循順序存取和后進先出(LIFO/FILO)的原則,這個RAM區叫堆棧
    的頭像 發表于 08-03 09:29 ?2.1w次閱讀

    stm32單片機和51單片機區別是什么

    單片機也就是單片微型計算機,和集CPU、RAM、ROM、輸入輸出設備、中斷系統在同一個芯片上的器件。 stm32單片機 stm32
    的頭像 發表于 08-19 18:21 ?2.9w次閱讀

    單片機入門--常見單片機PIC\STM32

    單片機入門--常見單片機PIC\STM32
    發表于 11-13 14:36 ?43次下載
    <b class='flag-5'>單片機</b>入門--常見<b class='flag-5'>單片機</b>PIC\<b class='flag-5'>STM32</b>

    單片機學習】STM32 和 51 區別

    單片機學習】STM32 和 51 區別
    發表于 11-14 15:36 ?18次下載
    【<b class='flag-5'>單片機</b>學習】<b class='flag-5'>STM32</b> 和 51 <b class='flag-5'>區別</b>

    51單片機STM32單片機區別在那里

      ?大部分朋友可能都知道51單片機stm32單片機也知道一般入門會先學習51單片機在學習stm32
    發表于 11-15 15:51 ?76次下載
    51<b class='flag-5'>單片機</b>和<b class='flag-5'>STM32</b><b class='flag-5'>單片機</b><b class='flag-5'>區別</b>在那里

    51單片機堆棧深入剖析

    上的擴展,既有C語言的共性,又有它自己的特點。本文介紹的是Cx51程序設計時堆棧的計算方法。   1.堆棧的溢出問題。MCS51系列單片機堆棧設置在片內RAM
    發表于 11-22 16:36 ?16次下載
    51<b class='flag-5'>單片機</b><b class='flag-5'>堆棧</b>深入剖析

    詳解STM32單片機堆棧

    學習STM32單片機的時候,總是能遇到“堆棧”這個概念。分享本文,希望對你理解堆棧有幫助。
    發表于 02-08 15:41 ?5次下載
    詳解<b class='flag-5'>STM32</b><b class='flag-5'>單片機</b>的<b class='flag-5'>堆棧</b>

    詳解STM32單片機和51單片機區別

    分享本文,簡單分析STM32與51單片機區別與取舍之處。
    的頭像 發表于 04-18 10:45 ?3.9w次閱讀

    ARM單片機STM32單片機之間有什么區別

    單片機工程師在進行項目開發的時候,經常需要進行單片機選型,根據項目功能需求選擇合適的單片,這就要求對每種單片機的特點和優勢非常熟悉,而ARM單片機
    的頭像 發表于 01-07 13:59 ?1.1w次閱讀

    普通單片機STM32單片機堆棧區別

    根據PC的值從程序存儲器讀出指令,送到指令寄存器。然后分析執行執行。這樣單片機就從內部程序存儲器去代碼指令,從RAM存取相關數據。
    發表于 01-30 11:27 ?569次閱讀

    全方位對比STM32單片機和51單片機

    萌新初入單片機領域,常會遇到STM32和51單片機兩大種類,無法選擇其一來提升技術,也不確定哪個單片機更適合后續技術進階提升和發展,今天這篇文將全方位對比
    發表于 03-02 14:18 ?3.2w次閱讀
    全方位對比<b class='flag-5'>STM32</b><b class='flag-5'>單片機</b>和51<b class='flag-5'>單片機</b>
    主站蜘蛛池模板: 快插我我好湿啊公交车上做 | 王晶经典三级 | 久久在精品线影院 | 97资源站超碰在线视频 | 国产精品美女久久久久AV超清 | 国产成人精品视频 | 精品人伦一区二区三区潘金莲 | 99久久久无码国产精精品 | 奇虎成人网 | 久久综合九色综合国产 | 日产精品久久久久久久蜜殿 | 国产精品无码中文在线AV | 涩涩视频下载 | 三级黄色小视频 | 免费一级毛片在线观看 | 国产成人精品男人的天堂网站 | 国产一区日韩二区欧美三区 | 国产露脸150部国语对白 | 色丁香婷婷综合缴情综 | 桃花论坛POWERED2019 | 扒开美女下面粉嫩粉嫩冒白浆 | 伊人色综合久久天天网 | 久久99re2在线视频精品 | 日本黄 色大片全 | 俄罗斯性孕妇孕交 | 扒开校花粉嫩小泬喷潮漫画 | 门鱼电影完整版免费版 | 日韩精品久久日日躁夜夜躁影视 | 人妖和美女玩 | 欧美囗交xx bbb视频 | 2012中文字幕手机在线 | 亚洲成片在线看 | 视频一区国产第一页 | 亚洲视频第二页 | 亚洲午夜精品A片久久软件 亚洲午夜精品A片久久不卡蜜桃 | 中文字幕一区二区三区在线播放 | 日韩午夜欧美精品一二三四区 | 久久兔费黄A级毛片高清 | 97人人看碰人免费公开视频 | 日本A级作爱片金瓶双艳 | 亚洲高清中文字幕 |