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

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

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

3天內不再提示

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

454398 ? 來源:博客園 ? 作者:Andrew_qian ? 2020-10-21 17:32 ? 次閱讀

看關于單片機方面的書籍的時候,總是能看到別人說的一些堆棧啊什么的操作,之前看到這個術語就直接跳過,沒想到去探究單片機內部的原理。但是最近課程學習微機原理這門課,需要我們寫匯編程序,匯編里面經常遇到堆棧這個東西,所以就找了個時間把堆棧給徹底的搞一下。

如果了解一點匯編編程話,就可以知道,堆棧是內存中一段連續的存儲區域,用來保存一些臨時數據。通常用來保存CALL指令調用子程序時的返回地址,RET指令從堆棧中獲取返回地址。中斷指令INT調用中斷程序時,將標志寄存器值、代碼段寄存器CS值、指令指針寄存器IP值保存在堆棧中。

堆棧也可以用來保存其他數據。

堆棧操作由PUSH,POP兩條指令來完成;

堆棧操作的操作數均為子類型(兩個字節)進行操作。

程序內存可以分為幾個區,棧區(stack),堆區(Heap),全局區(static),文字常亮區,程序代碼區。

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

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

我們一般說的堆棧指的棧。堆棧又分硬堆棧和軟堆棧,硬堆棧即SP,從片內RAM的頂部向下生長。軟堆棧在硬堆棧跟全局變量區之間的空間,C51函數調用通過R0-R7和棧來實現。

為什么單片機啟動時,不需要用bootloader將代碼從ROM搬移到RAM,而ARM則需要。這里我們可以先看看單片機程序執行的過程,單片機執行分三個步驟,取執行---分析指令----執行指令。取指令的任務是:根據PC的值從程序存儲器讀出指令,送到指令寄存器。然后分析執行執行。這樣單片機就從內部程序存儲器去代碼指令,從RAM存取相關數據。要知道RAM取數的速度是遠高于ROM的,但是單片機因為本身運行頻率不高,所以從ROM取指令慢并不影響。而ARM不同,cpu運行的頻率高,遠大于從ROM讀寫的速度,所以一般有操作系統,都需要將代碼部分拷貝到RAM中再執行。

再來看一個網上很流行的經典例子:

main.cpp

int a = 0; 全局初始化區

char *p1; 全局未初始化區

main()

{

int b; 棧

char s[] = “abc”; 棧

char *p2; 棧

char *p3 = “123456”; 123456/0在常量區,p3在棧上。

static int c =0; 全局(靜態)初始化區

p1 = (char *)malloc(10); 堆

p2 = (char *)malloc(20); 堆

}

不知道你是否有點明白了,堆和棧的第一個區別就是申請方式不同:棧(英文名稱是stack)是系統自動分配空間的,例如我們定義一個 char a;系統會自動在棧上為其開辟空間。而堆(英文名稱是heap)則是程序員根據需要自己申請的空間,例如malloc(10);開辟十個字節的空間。由于棧上的空間是自動分配自動回收的,所以棧上的數據的生存周期只是在函數的運行過程中,運行后就釋放掉,不可以再訪問。而堆上的數據只要程序員不釋放空間,就一直可以訪問到,不過缺點是一旦忘記釋放會造成內存泄露。

網上一個很好的比喻,摘抄下來,以便理解:

使用棧就象我們去飯館里吃飯,只管點菜(發出申請)、付錢、和吃(使用),吃飽了就走,不必理會切菜、洗菜等準備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自由度小。

使用堆就象是自己動手做喜歡吃的菜肴,比較麻煩,但是比較符合自己的口味,而且自由度大。

總結:

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

如果非要給他加幾個特點的話那就是:1、這些存儲單元中的內容都是程序執行過程中被中斷打斷時,事故現場的一些相關參數。如果不保存這些參數,單片機執行完中斷函數后就無法回到主程序繼續執行了。

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

好了,以上就是這些。
編輯:hfy

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

    關注

    6035

    文章

    44554

    瀏覽量

    634669
  • 寄存器
    +關注

    關注

    31

    文章

    5336

    瀏覽量

    120232
  • RAM
    RAM
    +關注

    關注

    8

    文章

    1368

    瀏覽量

    114647
  • Call
    +關注

    關注

    0

    文章

    9

    瀏覽量

    8327
  • 堆棧
    +關注

    關注

    0

    文章

    182

    瀏覽量

    19754
收藏 人收藏

    評論

    相關推薦

    單片機Debug工具性能對比 單片機調試常用命令

    單片機(Microcontroller Unit, MCU)調試是嵌入式開發的一個重要環節,它幫助開發者發現和修復代碼的錯誤,優化程序性能。不同的單片機和開發環境可能使用不同的調試
    的頭像 發表于 12-19 09:56 ?138次閱讀

    MCU與單片機的區別

    在現代電子技術領域,微控制單元(MCU)和單片機是兩個經常聽到的術語。盡管它們在某些方面有相似之處,但它們在設計、功能和應用上存在顯著差異。 一、定義與基本概念 1.1 微控制單元(MCU) 微控制
    的頭像 發表于 11-11 14:50 ?656次閱讀

    單片機怎么寫入程序

    單片機(Microcontroller Unit,MCU)是一種集成電路芯片,它將計算機的CPU、存儲器、輸入/輸出接口等功能集成在一個芯片上。單片機廣泛應用于嵌入式系統和物聯網設備
    的頭像 發表于 10-21 11:21 ?428次閱讀

    51單片機的主要邏輯功能部件是什么

    部件的操作。它包括算術邏輯單元(ALU),用于執行算術和邏輯運算。 2. 存儲器 程序存儲器(ROM):用于存儲程序代碼,通常是
    的頭像 發表于 10-18 12:49 ?391次閱讀

    單片機的中斷機制

    單片機的中斷機制是一種重要的處理方式,它允許單片機在執行主程序的過程,能夠暫停當前任務,轉而處理外部或內部緊急事件。這種機制極大地提高了系統的響應速度和處理能力,使得單片機在各種應用
    的頭像 發表于 10-17 18:03 ?620次閱讀

    單片機燒錄程序可以重新燒嗎

    好的程序代碼通過特定的方式寫入單片機存儲,使其能夠按照預定的邏輯執行任務。單片機燒錄程序可以重新燒錄,這是單片機編程和開發過程
    的頭像 發表于 09-02 10:04 ?1180次閱讀

    單片機燒錄程序的線比單片機上的少還能燒錄嗎

    單片機燒錄原理 單片機燒錄是指將編寫好的程序代碼通過一定的方式傳輸到單片機存儲,使其能夠按照程序的指令運行。這個過程通常需要使用燒錄器
    的頭像 發表于 09-02 09:54 ?482次閱讀

    單片機燒錄程序的基本步驟是什么

    單片機燒錄程序是單片機開發過程中非常重要的一步,它涉及到將編寫好的程序代碼通過一定的方式傳輸到單片機內部的存儲,使
    的頭像 發表于 09-02 09:47 ?998次閱讀

    轉載文章: 單片機初學者進階之編程

    、寄存器B(但僅限于乘法指令)、數據指針DPTR、位操作指令的進位標志Cy、工作組寄存器R7~R0。 3.直接尋址 操作數放在單片機的內部RAM的某個
    發表于 07-08 17:17

    一個暑假如何學習單片機

    一個暑假是學習和掌握單片機基礎知識的良好時機。以下是一個關于如何在暑假期間學習單片機的建議計劃
    的頭像 發表于 07-03 09:19 ?514次閱讀
    一個暑假如何學習<b class='flag-5'>單片機</b>

    單片機是什么?單片機編程如何入門?

    單片機其實是一種很早的叫法了,最開始我們的前輩叫單板機或者叫單片機,因為那個時候單片機的處理能力還沒有很強,現在我們所用的基本都是微型處理單元,也叫為控制器也稱之為MCU
    的頭像 發表于 03-28 08:03 ?1882次閱讀
    <b class='flag-5'>單片機</b>是什么?<b class='flag-5'>單片機</b>編程如何入門?

    單片機的最小系統由什么組成 單片機的最小系統包括哪些

    Unit,CPU)、存儲器、輸入輸出接口電路等核心功能,常見的單片機有以8051為代表的8位單片機、PIC系列單片機和AVR系列單片機等。
    的頭像 發表于 02-02 11:27 ?1.1w次閱讀

    單片機編程實例介紹

    單片機(Microcontroller)是指內部集成了處理器核心、存儲器、輸入輸出接口和外圍設備接口等功能模塊的集成電路芯片。它具有體積小、功耗低、性能高等優點,被廣泛應用于嵌入式系統單片
    的頭像 發表于 01-16 09:37 ?2615次閱讀

    單片機原理及應用是什么

    單片機(Microcontroller)是一種集成電路(IC)芯片,其中包括了中央處理器(CPU)、存儲器和輸入/輸出(I/O)設備等功能模塊。它是一種小型計算機系統,具有獨立的工作能力和完整的計算
    的頭像 發表于 01-12 15:28 ?2149次閱讀

    示波器測單片機輸出波形怎么測

    示波器是一種用來測量和顯示電壓信號波形的儀器,廣泛應用于電子設備的調試和測試。在單片機開發,示波器可以用來測量單片機的輸出波形,幫助開發者進行故障排除和性能優化。本文將詳細介紹如何
    的頭像 發表于 12-28 14:53 ?4245次閱讀
    主站蜘蛛池模板: 中文字幕一区久久久久| 丰满饥渴老太性hd| 日本漫画大全无翼乌| 嗨嗨快播电影| 爱情岛论坛网亚洲品质| 亚州三级视频| 麻豆成人久久精品二区三区网站 | 国产精品ⅴ视频免费观看| 亚洲欧美成人在线| 日韩内射美女人妻一区二区三区| 九色PORNY丨视频入口| 国产精品搬运| caoporn 在线视频| 诱人的女邻居9中文观看| 小xav导航| 色多多深夜福利免费观看| 暖暖的视频完整视频免费韩国| 后入到高潮免费观看| 国产色精品久久人妻无码| 成人影院午夜久久影院| gv手机在线观看| 97国产精品人妻无码免费| 曰批视频免费40分钟不要钱| 亚洲九九视频| 亚洲蜜桃AV色情精品成人| 性色无码AV久久蜜臀| 日韩欧美群交P内射捆绑| 久久久久久久久人体| 国产人妻精品无码AV在线五十路 | 夜色伊甸园| 小黄文污到你湿| 人妻换人妻AA视频| 男同志video最新猛男| 久久草福利自拍视频在线观看| 国产免费阿v精品视频网址| yellow免费| 久久永久影院免费| 国产亚洲欧美ai在线看片| 国产成人自产拍免费视频| 啊好深啊别拔就射在里面| 97免费在线视频|