精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

    3天內不再提示

    詳細解析STM32中的堆棧機制

    貿澤電子設計圈 ? 2018-01-15 15:03 ? 次閱讀

    剛拿到STM32時,你只編寫一個死循環

    詳細解析STM32中的堆棧機制

    編譯后,就會發現這么個程序已用了1600多的RAM,這要是在51單片機上,會心疼死了,這1600多的RAM跑哪兒去了,分析.map文件,你會發現是堆和棧占用的

    在startup_stm32f10x_md.s文件中,它的前面幾行就有以下定義:

    詳細解析STM32中的堆棧機制

    這下明白了吧,STM32在啟動的時候,RAM首先分配給使用到的全局變量,還有調用庫占用的一些數據(不太清楚是什么數據),然后再將剩余的空間分配給Heap和Stack。由于內存空間是啟動時實現分配好的,所以當動態分配內存的需求過多的時候,就會產生堆??臻g不足的問題。

    查閱網上的資料,理解堆和棧的區別:

    - (1)棧區(stack):由編譯器自動分配和釋放,存放函數的參數值、局部變量的值等,其操作方式類似于數據結構中的棧。

    - (2)堆區(heap):一般由程序員分配和釋放,若程序員不釋放,程序結束時可能由操作系統回收。分配方式類似于數據結構中的鏈表。

    - (3)全局區(靜態區)(static):全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域,未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。程序結束后由系統自動釋放。

    - (4)文字常量區:常量字符串就是存放在這里的。

    - (5)程序代碼區:存放函數體的二進制代碼。

    例如:

    詳細解析STM32中的堆棧機制

    所以堆和棧的區別:

    - stack的空間由操作系統自動分配/釋放,heap上的空間手動分配/釋放。

    - stack的空間有限,heap是很大的自由存儲區。

    - 程序在編譯期和函數分配內存都是在棧上進行,且程序運行中函數調用時參數的傳遞也是在棧上進行。

    顯然 Cortex-m3資料可知:__initial_sp是堆棧指針,它就是FLASH的0x8000000地址前面4個字節(它根據堆棧大小,由編譯器自動生成)顯然堆和棧是相鄰的。

    堆和??臻g分配:

    - 棧:向低地址擴展- 堆:向高地址擴展

    顯然如果依次定義變量,先定義的棧變量的內存地址比后定義的棧變量的內存地址要大,先定義的堆變量的內存地址比后定義的堆變量的內存地址要小。

    堆和棧變量:

    - 棧:臨時變量,退出該作用域就會自動釋放- 堆:malloc變量,通過free函數釋放

    寫程序時應該注意:

    1. 所以最好是不要調用太深。2. 局部變量不要太大太多,如局部數組,超過某個數量需定義為全局數組,因為局部數組同樣儲存在堆棧中。

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

      關注

      2266

      文章

      10876

      瀏覽量

      354927
    • 堆棧
      +關注

      關注

      0

      文章

      182

      瀏覽量

      19734

    原文標題:再次理解STM32中的堆棧機制,通俗易懂~

    文章出處:【微信號:Mouser-Community,微信公眾號:貿澤電子設計圈】歡迎添加關注!文章轉載請注明出處。

    收藏 人收藏

      評論

      相關推薦

      詳細解析STM32的外部中斷

      說明:本文旨在詳細解析STM32的外部中斷,以實現按鍵觸發外部中斷。其中包含“編程流程”、“程序代碼”、“代碼解析”、“原理分析”、“小結”五部分。一、編程流程要實現
      發表于 08-13 07:50

      FreeRTOS的任務堆棧溢出檢測機制

      合理的任務堆棧大小,并實際運行程序進行測試,來確保系統運行過程不會發生堆棧溢出。FreeRTOS的任務堆棧溢出檢測
      發表于 10-15 13:51

      STM32內存管理以及STM32堆棧

      這個是MDK編譯之后能夠得到的每個段的大小,也就能得到占用相應的FLASH和RAM的大小,但是還有兩個數據段也會占用RAM,但是是在程序運行的時候,才會占用,那就是堆和棧。在stm32的啟動文件.s
      的頭像 發表于 03-29 13:45 ?1.3w次閱讀

      一文解析STM32內存管理和堆棧的認知與理解

      本文主要介紹了STM32內存管理和堆棧的認知與理解,首先介紹的是內存管理的實現原理及分配、釋放原理,其次介紹了stm32的存儲器結構,最后闡述了堆棧的認知與理解,具體的跟隨小編一起來了
      的頭像 發表于 04-26 16:22 ?1.8w次閱讀
      一文<b class='flag-5'>解析</b><b class='flag-5'>STM32</b>內存管理和<b class='flag-5'>堆棧</b>的認知與理解

      STM32堆棧及其在uC/OS-II的使用

      STM32堆棧及其在uC/OS-II的使用 說明:里面可能有不少錯誤的觀念,希望大家發現后及時的糾正。 首先了解一下雙堆棧的知識,下面的圖片來自《Cortex-M3權威指南》,有點
      發表于 09-08 16:59 ?371次閱讀

      基于STM32單片機低功耗模式機制詳細解析

      本文主要解讀STM32低功耗模式的機制,并不側重STM32低功耗的程序實現,而且借助STM32固件庫實現STM32低功耗會變的非常簡單。
      發表于 10-24 16:16 ?1.9w次閱讀
      基于<b class='flag-5'>STM32</b>單片機低功耗模式<b class='flag-5'>機制</b><b class='flag-5'>詳細</b><b class='flag-5'>解析</b>

      STM32單片機的堆棧深入解析

      學習STM32單片機的時候,總是能遇到堆棧這個概念。分享本文,希望對你理解堆棧有幫助。 對于了解一點匯編編程的人,就可以知道,堆棧是內存中一段連續的存儲區域,用來保存一些臨時數據。
      的頭像 發表于 10-30 17:31 ?4690次閱讀
      <b class='flag-5'>STM32</b>單片機的<b class='flag-5'>堆棧</b>深入<b class='flag-5'>解析</b>

      深度解析Asp.Net2.0的Callback機制

      深度解析Asp.Net2.0的Callback機制(ups電源技術維修)-該文檔為深度解析Asp.Net2.0的Callback
      發表于 09-27 16:28 ?1次下載
      深度<b class='flag-5'>解析</b>Asp.Net2.0<b class='flag-5'>中</b>的Callback<b class='flag-5'>機制</b>

      STM32堆棧空間大小設置

      1. 設置堆棧空間大小在使用STM32編程時,一般情況下我們不會關注堆棧空間的大小,因為在STM32的啟動文件,已經幫我們預先設置好了
      發表于 12-17 18:36 ?12次下載
      <b class='flag-5'>STM32</b><b class='flag-5'>堆棧</b>空間大小設置

      stm32修改堆棧大?。?b class='flag-5'>堆棧空間不足導致死機)

      1. 設置堆棧空間大小在使用STM32編程時,一般情況下我們不會關注堆棧空間的大小,因為在STM32的啟動文件,已經幫我們預先設置好了
      發表于 12-27 19:09 ?22次下載
      <b class='flag-5'>stm32</b>修改<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>

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

      學習STM32單片機的時候,總是能遇到“堆棧”這個概念。分享本文,希望對你理解堆棧有幫助。
      的頭像 發表于 04-13 11:15 ?3144次閱讀

      詳解C/C++堆棧的工作機制

      我們經常會討論這樣的問題:什么時候數據存儲在堆棧(Stack),什么時候數據存儲在堆(Heap)。我們知道,局部變量是存儲在堆棧的;d
      的頭像 發表于 07-29 09:09 ?1106次閱讀

      STM32WB BLE 堆棧編程指南

      STM32WB BLE 堆棧編程指南
      發表于 11-24 08:29 ?3次下載
      <b class='flag-5'>STM32</b>WB BLE <b class='flag-5'>堆棧</b>編程指南

      一文解析LinuxARP學習和老化機制

      ARP學習和老化機制在Linux網絡通信中起著至關重要的作用。ARP(Address Resolution Protocol)地址解析協議是將IP地址解析為MAC地址的一種機制。
      發表于 08-04 16:55 ?1411次閱讀