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

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。由于內存空間是啟動時實現分配好的,所以當動態分配內存的需求過多的時候,就會產生堆棧空間不足的問題。

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

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

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

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

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

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

例如:

詳細解析STM32中的堆棧機制

所以堆和棧的區別:

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

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

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

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

堆和棧空間分配:

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

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

堆和棧變量:

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

寫程序時應該注意:

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

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

    關注

    2270

    文章

    10895

    瀏覽量

    355743
  • 堆棧
    +關注

    關注

    0

    文章

    182

    瀏覽量

    19753

原文標題:再次理解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 ?379次閱讀

    基于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 ?4705次閱讀
    <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修改堆棧大小(堆棧空間不足導致死機)

    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 ?3161次閱讀

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

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

    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 ?1465次閱讀
    主站蜘蛛池模板: 成年视频xxxxxx在线| 717影院理论午夜伦不卡久久| 性色欲情网站IWWW| 亚洲 欧美 国产在线视频| 亚洲AV无码乱码国产麻豆P| 亚洲中文字幕欧美自拍一区| 在线电台收听| xxxxx中国明星18| 国产二区自拍| 黑人操白逼| 男女啪啪久久精品亚洲A| 日日噜噜夜夜狠狠视频| 亚洲2017天堂色无码| 永久免费毛片| xxx日本高清视频hd| 国产精品高清在线观看93| 黄A无码片内射无码视频| 老司机午夜影院试看区| 三级黄色片免费观看| 亚洲精品国产精品精| 91久久偷偷看嫩草影院无费| 动听968| 九九热这里只有国产精品| 欧美午夜a级精美理论片| 性色无码AV久久蜜臀| 69夫妇交友群| 国产精品视频第一区二区三区| 久久精品成人免费看| 青青草原影视| 亚洲日本天堂在线| RUNAWAY韩国动漫免费官网版| 国产睡熟迷奷系列精品| 男女高潮又爽又黄又无遮挡| 小黄文污到你湿| 99久久精品免费精品国产| 国产亚洲精品久久久久久鸭绿欲 | 99久久精品6在线播放| 国产人妻麻豆蜜桃色69| 男女高潮又爽又黄又无遮挡| 亚洲精品国偷拍自产在线观看蜜臀| 91精品婷婷国产综合久久8|