日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于單片機堆棧操作:堆棧是單片機中的存儲單元

454398 ? 來源:博客園 ? 作者:Andrew_qian ? 2020-10-21 17:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

如果了解一點匯編編程話,就可以知道,堆棧是內(nèi)存中一段連續(xù)的存儲區(qū)域,用來保存一些臨時數(shù)據(jù)。通常用來保存CALL指令調(diào)用子程序時的返回地址,RET指令從堆棧中獲取返回地址。中斷指令I(lǐng)NT調(diào)用中斷程序時,將標(biāo)志寄存器值、代碼段寄存器CS值、指令指針寄存器IP值保存在堆棧中。

堆棧也可以用來保存其他數(shù)據(jù)。

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

堆棧操作的操作數(shù)均為子類型(兩個字節(jié))進(jìn)行操作。

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

程序編譯之后,全局變量,靜態(tài)變量已經(jīng)分配好內(nèi)存空間,在函數(shù)運行時,程序需要為局部變量分配??臻g,當(dāng)中斷來時,也需要將函數(shù)指針入棧,保護(hù)現(xiàn)場,以便于中斷處理完之后再回到之前執(zhí)行的函數(shù)。

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

我們一般說的堆棧指的棧。堆棧又分硬堆棧和軟堆棧,硬堆棧即SP,從片內(nèi)RAM的頂部向下生長。軟堆棧在硬堆棧跟全局變量區(qū)之間的空間,C51函數(shù)調(diào)用通過R0-R7和棧來實現(xiàn)。

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

再來看一個網(wǎng)上很流行的經(jīng)典例子:

main.cpp

int a = 0; 全局初始化區(qū)

char *p1; 全局未初始化區(qū)

main()

{

int b; 棧

char s[] = “abc”; 棧

char *p2; 棧

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

static int c =0; 全局(靜態(tài))初始化區(qū)

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

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

}

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

網(wǎng)上一個很好的比喻,摘抄下來,以便理解:

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

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

總結(jié):

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

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

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

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機
    +關(guān)注

    關(guān)注

    6078

    文章

    45593

    瀏覽量

    674010
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5620

    瀏覽量

    130455
  • RAM
    RAM
    +關(guān)注

    關(guān)注

    8

    文章

    1401

    瀏覽量

    121067
  • Call
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    8523
  • 堆棧
    +關(guān)注

    關(guān)注

    0

    文章

    184

    瀏覽量

    20589
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    在學(xué)單片機時在堆棧遇到的問題分享

    數(shù)量的字節(jié)作為軟件堆棧。硬件堆棧和軟件堆棧均為向下生長型的堆棧(注意:這與51單片機相反)。 通常如果你的程序沒有子程序調(diào)用也不調(diào)用象帶有%
    發(fā)表于 01-23 07:47

    堆棧的原理揭秘

    1. 什么是堆棧?單片機應(yīng)用,堆棧是個特殊存儲區(qū),堆棧屬于RAM空間的一部分,
    發(fā)表于 01-23 07:08

    單片機程序跑飛死機的幾種原因分享

    在使用單片機過程,經(jīng)常會出現(xiàn)程序運行一段時間后,不能夠正常相應(yīng)的情況。一般分為軟件原因和硬件原因,其中硬件原因比較容易查,軟件原因就較為復(fù)雜。 軟件導(dǎo)致單片機死機的原因 1、指針異常 指針未
    發(fā)表于 01-21 07:34

    單片機里的程序運行方式

    我們想要理解單片機是如何運行程序的,我們首先需要了解單片機的組成,我們這里以80C51單片機為例來理解程序在單片機是如何運行的。
    發(fā)表于 01-16 06:57

    單片機堆棧解析

    什么是單片機堆棧? 在片內(nèi)RAM,常常要指定一個專門的區(qū)域來存放某些特別的數(shù)據(jù),它遵循順序存取和后進(jìn)先出(LIFO/FILO)的原則,這個RAM區(qū)叫堆棧。 它的作用 子程序調(diào)用和中斷
    發(fā)表于 12-09 06:52

    單片機程序的執(zhí)行

    : 對單片機編程后,程序的代碼段,data段,bss段,rodata段等都存放在Flash。當(dāng)單片機上電后,初始化匯編代碼將data段,bss段,復(fù)制到RAM,并建立好
    發(fā)表于 12-04 06:20

    堆棧指針SP介紹

    =07H,不用重新賦值也是可以的,否則,為什么當(dāng)初設(shè)計者會這么設(shè)計呢。由于51單片機堆棧是向上增長的,所以,為了避免堆棧區(qū)與用戶數(shù)據(jù)區(qū)互相影響,才將SP設(shè)置在60H以后,比較合理的是賦值為6FH,這樣
    發(fā)表于 11-17 06:07

    單片機原理及應(yīng)用詳解

    單片機(Microcontroller Unit, MCC) ?是一種集成計算機核心功能(CPU、存儲器、I/O接口等)的微型芯片,廣泛應(yīng)用于嵌入式系統(tǒng)。以下是其原理及應(yīng)用的詳細(xì)介紹: 一、
    的頭像 發(fā)表于 08-11 13:57 ?2846次閱讀

    單片機用什么封裝

    單片機封裝是將芯片內(nèi)部電路與外部引腳連接并包裹保護(hù)的結(jié)構(gòu),不僅影響單片機的安裝方式、適用場景,還與電路設(shè)計的緊湊性、散熱性能密切相關(guān)。不同封裝類型各有特點,適配從簡單電路到復(fù)雜系統(tǒng)的多樣化需求
    的頭像 發(fā)表于 08-01 13:47 ?1628次閱讀

    什么單片機比較耐用

    ? ? ? ? 在工業(yè)控制、戶外設(shè)備、醫(yī)療儀器等場景單片機的耐用性直接決定了設(shè)備的穩(wěn)定運行與維護(hù)成本。耐用的單片機通常具備寬溫工作范圍、強抗干擾能力、穩(wěn)定的電源適應(yīng)性和長壽命的硬件設(shè)計。深圳市安
    的頭像 發(fā)表于 07-31 13:48 ?928次閱讀

    單片機的儲存優(yōu)點是什么

    單片機作為嵌入式系統(tǒng)的核心,其儲存系統(tǒng)是實現(xiàn)數(shù)據(jù)存儲與程序運行的關(guān)鍵部分。與獨立存儲芯片相比,單片機的儲存單元在集成度、功耗、可靠性等方面具
    的頭像 發(fā)表于 07-31 10:09 ?837次閱讀

    怎么測單片機系統(tǒng)頻率

    ,各有其特點和操作要點。 示波器測量法 示波器是測量單片機系統(tǒng)頻率的常用工具,其原理是通過捕捉單片機輸出的周期性信號,根據(jù)信號的周期計算頻率。 操作步驟 首先,確定
    的頭像 發(fā)表于 07-25 11:39 ?1106次閱讀

    單片機怎么驅(qū)動電機?

    在各類自動化設(shè)備和智能裝置,電機是重要的執(zhí)行部件,而單片機作為控制核心,需要通過特定的方式驅(qū)動電機運轉(zhuǎn)。單片機驅(qū)動電機并非直接連接即可,而是要根據(jù)電機類型和功率,搭配合適的驅(qū)動電路,才能實現(xiàn)穩(wěn)定
    的頭像 發(fā)表于 07-25 09:31 ?1362次閱讀

    單片機怎么燒程序

    單片機燒程序是將編寫好的程序代碼寫入單片機內(nèi)部存儲單元,讓單片機按照預(yù)設(shè)邏輯工作的過程,是單片機應(yīng)用開發(fā)
    的頭像 發(fā)表于 07-23 11:47 ?2076次閱讀

    KF32A136系列單片機產(chǎn)品介紹

    F32A136 系列單片機是基于 KF32 內(nèi)核架構(gòu)開發(fā)的單片機。
    的頭像 發(fā)表于 06-27 11:42 ?2846次閱讀
    KF32A136系列<b class='flag-5'>單片機</b>產(chǎn)品介紹
    香河县| 云阳县| 鄂尔多斯市| 思茅市| 文化| 伊川县| 宜昌市| 汉川市| 湖口县| 云和县| 孝义市| 巫溪县| 沧州市| 甘肃省| 垫江县| 阜平县| 田林县| 崇礼县| 定远县| 广西| 湖北省| 宜良县| 彰武县| 姜堰市| 沧州市| 新竹县| 芒康县| 丘北县| 泰和县| 马公市| 麻栗坡县| 邵武市| 乌拉特中旗| 辽中县| 富宁县| 九江县| 龙川县| 抚松县| 民县| 军事| 涞水县|