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

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

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

3天內不再提示

關于STM32存儲的堆棧地址

要長高 ? 來源:小平頭社區 ? 作者:CSDN博客 ? 2022-06-05 16:37 ? 次閱讀

由c/C++編譯的程序占用的內存分為以下幾個部分

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

2、堆區(heap)—一般由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回收。注意它與數據結構中的堆是兩回事,分配方式倒是類似于鏈表,呵呵。

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

4、文字常量區—常量字符串就是放在這里的。程序結束后由系統釋放

5、程序代碼區—存放函數體的二進制代碼。

pYYBAGKYddeAREVgAASmCfjjtMk801.png

STM32的地址空間映射圖

我們可以看到代碼存儲區域在CODE區域;

STM32的堆棧是存放在片上靜態SRAM中的,地址分配可以見Keil的編譯map文件:

代碼來源地址:https://download.csdn.net/download/emoeror_zhang/11286638

HEAP0x20000148Section512startup_stm32f10x_hd.o(HEAP)

STACK0x20000348Section1024startup_stm32f10x_hd.o(STACK)

__initial_sp0x20000748Data0startup_stm32f10x_hd.o(STACK)

上面節選中,HEAP是堆的基地址,__initial_sp是棧指針。示意圖如下

pYYBAGKYdeaAagmNAACNKStVFbc164.png

堆棧地址的設置

在上述圖和map中,我么可以看到堆的大小是0線0x200,也就是在0x20000148-0x20000348之間,而棧的地址大小是0x400,也就是在0x20000348-0x20000748。為什么他們的大小是這樣的,是怎么由來的呢?

打開匯編文件startup_stm32f10x_hd.s,我們可以找到相對應的設置堆棧大小的程序,如圖:

poYBAGKYdfqAIeAdAADmPvi82uU094.png

堆和棧,一般堆是由低地址往上增長,棧是由往下減少。都是連續的,C語言不提供內存保護機制類似的功能,如果堆一直增長,棧一直申請,然后就會導致棧溢出,從而導致程序崩潰。

變量儲存位置分析

同樣的,我們還是以上述的map文件為例子進行分析。

pYYBAGKYdg2AMF5EAASKMxLkq5M724.png

如圖所示,fac_ms和fac_us在程序中是static變量類型,儲存在0x20000000-0x20000148之間的位置,fac_ms在0x20000016,fac_us在0x20000014,那其他的地址處是什么數據呢?

繼續在map里面尋找,找到如下圖所示:

pYYBAGKYdhqAJswbAAJueeLqXBM513.png

pYYBAGKYdi2AIM_dAAElpGJE-zs610.png

發現其余的地質處儲存了全局變量數組,以及引用的庫文件的全局變量。

在map里面我們看到,全局變量和靜態變量儲存的位置,和堆棧無關,那么堆棧儲存的內容是什么呢?

五、堆棧存放內容

1、棧區

存放函數的參數值,局部變量的值等等臨時變量,退出該作用域該臨時變量就會自動釋放。

2、堆區

系統會給每個程序分配一部分棧空間讓他們能夠運行起來,問題就是棧空間必然存在不夠用的問題,而堆不屬于程序,堆是獨立的,是公用的。只要你malloc(sizeof(SIZE_YOU_WANT)),就可以得到相應一部分的堆空間。

簡單的來說,就是當你使用的時候malloc申請一部分空間來使用,但是別忘記了使用完成之后free掉,不然往往會堆溢出,占用了棧的位置空間,導致程序奔潰。

總結:

如果我們設置了堆的空間大小,但是我們程序中沒有進行malloc申請,那么在程序事假運行的時候,我們棧的空間超過本身設置的空間,進入到堆里面,那么程序是不會出錯的,但是超過了堆的空間了,進入到全局變量區域,就會出現莫名其妙的錯誤。

不使用malloc,我們可以將堆設置成0,這是沒有問題的,但是棧的空間大小要設置成合適的,不然就會因為棧溢出,進入harderror,程序奔潰。

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

    關注

    6

    文章

    768

    瀏覽量

    114869
  • STM32
    +關注

    關注

    2272

    文章

    10923

    瀏覽量

    357427
收藏 人收藏

    評論

    相關推薦

    STM32如何定義堆棧地址到RAM區頂端

    ,測試驗證成功,開始時堆棧地址指向RAM的頂端,即R13的值為0x20005000 關注微信公眾號:嵌入式STM32軟硬件開發,來學習更多STM32開發的深入知識。
    發表于 12-07 14:14

    關于STM32堆棧指針(MSP)與進程堆棧指針(PSP)

    我正在閱讀STM32編程手冊和“ 第18頁 ”的某處,我看到了這兩種堆棧指針。我一直認為只有一個堆棧,因此只有一個堆棧指針存在于MCU中,現在我對這些指針的含義感到困惑,主題和每個指針
    發表于 10-30 11:46

    stm32上ucosii堆棧存儲該怎么用?

    將ucosii一致到stm32上時,給任務分配的堆棧是放在32的堆棧區了,還是靜態存儲去了,因為我們給任務設計的堆棧實質上是一個全局變量的數
    發表于 08-30 01:10

    詳解STM32單片機的堆棧

    的一些相關參數。如果不保存這些參數,單片機執行完中斷函數后就無法回到主程序繼續執行了。這些存儲單元的地址被記在了一個叫做堆棧指針(SP)的地方。結合STM32的開發講述
    發表于 01-12 11:30

    關于堆棧的問題

    置頂/星標公眾號,不錯過每一條消息前段時間分享文章《STM32的啟動流程到底是怎樣的?》之后,很多朋友問了關于堆棧的問題。今天就寫點相關內容,讓大家進一步了解堆棧...
    發表于 11-01 09:10

    STM32堆棧地址是怎么得出來的?

    STM32堆棧地址是怎么得出來的?
    發表于 11-26 07:14

    STM32WB5MMG上無線堆棧的起始地址可以設置成什么呢

    選項 -firstinstall=0 時由 STM32CubeProgrammer 執行的)我看到新圖像是 167 KB,從日志中,我認為當前堆棧可能是 8192 字節,但我仍然不清楚將什么設置為起始地址
    發表于 12-08 06:02

    STM32WB55RC 256K閃存的Zigbee堆棧實際地址是什么?

    我們正在嘗試在STM32WB55RC上加載 stm32wb5x_Zigbee_FFD_fw.bin,但發行說明中的??地址表顯示 FFD 堆棧為 0x00,STMCube 程序員給出了
    發表于 12-23 09:03

    STM32內存管理以及STM32中的堆棧

    文件里面,就有堆棧的設置,其實這個堆棧的內存占用就是在上面RAM分配給RW-data+ZI-data之后的地址開始分配的。
    的頭像 發表于 03-29 13:45 ?1.3w次閱讀

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

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

    關于單片機堆棧操作:堆棧是單片機中的存儲單元

    堆棧這個東西,所以就找了個時間把堆棧給徹底的搞一下。 如果了解一點匯編編程話,就可以知道,堆棧是內存中一段連續的存儲區域,用來保存一些臨時數據。通常用來保存CALL指令調用子程序時的返
    的頭像 發表于 10-21 17:32 ?5582次閱讀
    <b class='flag-5'>關于</b>單片機<b class='flag-5'>堆棧</b>操作:<b class='flag-5'>堆棧</b>是單片機中的<b class='flag-5'>存儲</b>單元

    虛擬地址物理地址等眾多地址及MMU相關知識

    虛擬地址物理地址等眾多地址及MMU相關知識先聊聊存儲STM32單片機存儲
    發表于 12-08 12:36 ?12次下載
    虛擬<b class='flag-5'>地址</b>物理<b class='flag-5'>地址</b>等眾多<b class='flag-5'>地址</b>及MMU相關知識

    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>

    STM32WB BLE 堆棧編程指南

    STM32WB BLE 堆棧編程指南
    發表于 11-24 08:29 ?3次下載
    <b class='flag-5'>STM32</b>WB BLE <b class='flag-5'>堆棧</b>編程指南
    主站蜘蛛池模板: 在线自拍亚洲视频欧美 | 美女扒开腿让男生桶免费看动态图 | 亚洲成人黄色在线 | 黑人强伦姧人妻日韩那庞大的 | 亚洲精品无码不卡 | 国产一区二区内射最近更新 | 国产成人精品永久免费视频 | 小776 论坛 | 欧美性xxx极品| 日本少妇无码精品12P | 日韩精品无码视频一区二区蜜桃 | 人人在线碰碰视频免费 | 亚洲精品国产精品精 | 国产精品免费观看视频播放 | 1V1各种PLAY女主被肉 | 久久大香线蕉综合爱 | 一本大道熟女人妻中文字幕在线 | 白丝制服被啪到喷水很黄很暴力 | 伊人久久电影院 | 欧美黑人巨大videos免费 | 成人高清网站 | 国产精品人妻无码免费A片导航 | 中文字幕一区二区三区在线播放 | 久久婷婷五月综合色丁香花 | 国产精品亚洲一区二区三区久久 | 日本美女靠逼 | 果冻传媒在线看免费高清 | 亚洲精品久久久久无码AV片软件 | ping色堂| 国产精品女上位好爽在线短片 | 色欲AV亚洲情无码AV蜜桃 | 精品久久伦理中文字幕 | 老师别揉我胸啊嗯小说 | 91久久偷偷做嫩草影院免费看 | 99国产这里只有精品视频 | 帅哥男男GV在线1080P | 777黄色片| 国产美女久久久久久久久久久 | 国产精品久久久久影院免费 | 外国xxxx| 67194成在线观看免费 |