亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

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

堆棧操作由PUSH,POP兩條指令來(lái)完成;

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

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

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

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

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

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

再來(lái)看一個(gè)網(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); 堆

}

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

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

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

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

總結(jié):

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

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

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

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

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

    關(guān)注

    6072

    文章

    45277

    瀏覽量

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

    關(guān)注

    31

    文章

    5522

    瀏覽量

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

    關(guān)注

    8

    文章

    1397

    瀏覽量

    119645
  • Call
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

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

    關(guān)注

    0

    文章

    183

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

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

    單片機(jī)用什么封裝

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

    什么單片機(jī)比較耐用

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

    單片機(jī)的儲(chǔ)存優(yōu)點(diǎn)是什么

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

    怎么測(cè)單片機(jī)系統(tǒng)頻率

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

    單片機(jī)怎么驅(qū)動(dòng)電機(jī)?

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

    單片機(jī)怎么燒程序

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

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

    F32A136 系列單片機(jī)是基于 KF32 內(nèi)核架構(gòu)開(kāi)發(fā)的單片機(jī)。
    的頭像 發(fā)表于 06-27 11:42 ?1410次閱讀
    KF32A136系列<b class='flag-5'>單片機(jī)</b>產(chǎn)品介紹

    扒一扒單片機(jī)存儲(chǔ)器的那些事

    單片機(jī)存儲(chǔ)器的關(guān)系像什么?單片機(jī)里的存儲(chǔ)都是一樣的嗎?為什么有的單片機(jī)既有EEPROM又有Flash?
    的頭像 發(fā)表于 04-10 10:06 ?1228次閱讀
    扒一扒<b class='flag-5'>單片機(jī)</b>與<b class='flag-5'>存儲(chǔ)</b>器的那些事

    單片機(jī)科普總結(jié),建議收藏!

    單片機(jī)(MicrocontrollerUnit,MCU)作為嵌入式系統(tǒng)的核心之一,在現(xiàn)代電子產(chǎn)品無(wú)處不在。從智能家居、汽車電子,到工業(yè)控制、醫(yī)療設(shè)備,單片機(jī)支撐著無(wú)數(shù)智能化應(yīng)用的發(fā)展。對(duì)于初學(xué)者
    的頭像 發(fā)表于 04-07 11:58 ?3763次閱讀
    <b class='flag-5'>單片機(jī)</b>科普總結(jié),建議收藏!

    什么是單片機(jī)的ADC接口

    在嵌入式系統(tǒng)和工業(yè)自動(dòng)化領(lǐng)域,單片機(jī)(Microcontroller)作為核心控制單元,承擔(dān)著數(shù)據(jù)采集、處理和控制的重要任務(wù)。其中,模數(shù)轉(zhuǎn)換器(Analog-to-Digital Converter
    的頭像 發(fā)表于 02-03 11:27 ?3489次閱讀

    單片機(jī)在電子技術(shù)的應(yīng)用及發(fā)展

    其在實(shí)現(xiàn)設(shè)備智能化、微型化和功能提升方面的重要作用。接著,探討了單片機(jī)技術(shù)的最新發(fā)展動(dòng)態(tài),如片內(nèi)存儲(chǔ)器的改進(jìn)、在線編程技術(shù)的應(yīng)用以及接口技術(shù)的發(fā)展等,為單片機(jī)技術(shù)的未來(lái)發(fā)展提供了方向。 關(guān)鍵詞 :
    的頭像 發(fā)表于 01-15 10:30 ?1134次閱讀

    單片機(jī)Debug工具性能對(duì)比 單片機(jī)調(diào)試常用命令

    單片機(jī)(Microcontroller Unit, MCU)調(diào)試是嵌入式開(kāi)發(fā)的一個(gè)重要環(huán)節(jié),它幫助開(kāi)發(fā)者發(fā)現(xiàn)和修復(fù)代碼的錯(cuò)誤,優(yōu)化程序性能。不同的單片機(jī)和開(kāi)發(fā)環(huán)境可能使用不同的調(diào)試
    的頭像 發(fā)表于 12-19 09:56 ?2009次閱讀

    51單片機(jī)為什么很少出現(xiàn)printf的身影

    51單片機(jī)為什么很少出現(xiàn) printf 的身影?是用不了嗎? 不是的,51單片機(jī)可以用 printf,只是不建議使用。 平時(shí)我們?cè)?b class='flag-5'>操作系統(tǒng)上寫(xiě)C語(yǔ)言代碼,使用 printf 可以把數(shù)
    的頭像 發(fā)表于 12-03 10:46 ?1724次閱讀
    51<b class='flag-5'>單片機(jī)</b><b class='flag-5'>中</b>為什么很少出現(xiàn)printf的身影

    MCU與單片機(jī)的區(qū)別

    在現(xiàn)代電子技術(shù)領(lǐng)域,微控制單元(MCU)和單片機(jī)是兩個(gè)經(jīng)常聽(tīng)到的術(shù)語(yǔ)。盡管它們?cè)谀承┓矫嬗邢嗨浦?,但它們?cè)谠O(shè)計(jì)、功能和應(yīng)用上存在顯著差異。 一、定義與基本概念 1.1 微控制單元(MCU) 微控制
    的頭像 發(fā)表于 11-11 14:50 ?3753次閱讀