欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

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

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

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

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

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

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

堆棧操作的操作數(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)中斷來時(shí),也需要將函數(shù)指針入棧,保護(hù)現(xiàn)場(chǎng),以便于中斷處理完之后再回到之前執(zhí)行的函數(shù)。

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

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

為什么單片機(jī)啟動(dòng)時(shí),不需要用bootloader將代碼從ROM搬移到RAM,而ARM則需要。這里我們可以先看看單片機(jī)程序執(zhí)行的過程,單片機(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讀寫的速度,所以一般有操作系統(tǒng),都需要將代碼部分拷貝到RAM中再執(zhí)行。

再來看一個(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)在棧上為其開辟空間。而堆(英文名稱是heap)則是程序員根據(jù)需要自己申請(qǐng)的空間,例如malloc(10);開辟十個(gè)字節(jié)的空間。由于棧上的空間是自動(dòng)分配自動(dòng)回收的,所以棧上的數(shù)據(jù)的生存周期只是在函數(shù)的運(yùn)行過程中,運(yùn)行后就釋放掉,不可以再訪問。而堆上的數(shù)據(jù)只要程序員不釋放空間,就一直可以訪問到,不過缺點(diǎn)是一旦忘記釋放會(huì)造成內(nèi)存泄露。

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

使用棧就象我們?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í)行過程中被中斷打斷時(shí),事故現(xiàn)場(chǎng)的一些相關(guān)參數(shù)。如果不保存這些參數(shù),單片機(jī)執(zhí)行完中斷函數(shù)后就無法回到主程序繼續(xù)執(zhí)行了。

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

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

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

    關(guān)注

    6043

    文章

    44624

    瀏覽量

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

    關(guān)注

    31

    文章

    5369

    瀏覽量

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

    關(guān)注

    8

    文章

    1369

    瀏覽量

    115053
  • Call
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

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

    關(guān)注

    0

    文章

    182

    瀏覽量

    19836
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    什么是單片機(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 ?199次閱讀

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

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

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

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

    單片機(jī)在工業(yè)自動(dòng)化的應(yīng)用

    隨著科技的不斷進(jìn)步,單片機(jī)技術(shù)在工業(yè)自動(dòng)化領(lǐng)域扮演著越來越重要的角色。 1. 引言 單片機(jī)是一種集成了處理器核心、存儲(chǔ)器、輸入/輸出接口等組件的微型計(jì)算機(jī)。它們通常用于控制嵌入式系統(tǒng),如家
    的頭像 發(fā)表于 11-01 14:15 ?473次閱讀

    單片機(jī)怎么寫入程序

    單片機(jī)(Microcontroller Unit,MCU)是一種集成電路芯片,它將計(jì)算機(jī)的CPU、存儲(chǔ)器、輸入/輸出接口等功能集成在一個(gè)芯片上。單片機(jī)廣泛應(yīng)用于嵌入式系統(tǒng)和物聯(lián)網(wǎng)設(shè)備
    的頭像 發(fā)表于 10-21 11:21 ?971次閱讀

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

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

    單片機(jī)的中斷機(jī)制

    單片機(jī)的中斷機(jī)制是一種重要的處理方式,它允許單片機(jī)在執(zhí)行主程序的過程,能夠暫停當(dāng)前任務(wù),轉(zhuǎn)而處理外部或內(nèi)部緊急事件。這種機(jī)制極大地提高了系統(tǒng)的響應(yīng)速度和處理能力,使得單片機(jī)在各種應(yīng)用
    的頭像 發(fā)表于 10-17 18:03 ?1013次閱讀

    單片機(jī)燒錄程序用什么軟件

    單片機(jī)燒錄程序是單片機(jī)開發(fā)過程的一個(gè)重要環(huán)節(jié),涉及到將編寫好的程序代碼通過燒錄器寫入單片機(jī)的ROM,以實(shí)現(xiàn)對(duì)
    的頭像 發(fā)表于 09-02 10:05 ?1699次閱讀

    單片機(jī)燒錄程序可以重新燒嗎

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

    單片機(jī)燒錄程序的線比單片機(jī)上的少還能燒錄嗎

    單片機(jī)燒錄原理 單片機(jī)燒錄是指將編寫好的程序代碼通過一定的方式傳輸?shù)?b class='flag-5'>單片機(jī)的存儲(chǔ),使其能夠按照程序的指令運(yùn)行。這個(gè)過程通常需要使用燒錄器
    的頭像 發(fā)表于 09-02 09:54 ?617次閱讀

    單片機(jī)燒錄程序的基本步驟是什么

    單片機(jī)燒錄程序是單片機(jī)開發(fā)過程中非常重要的一步,它涉及到將編寫好的程序代碼通過一定的方式傳輸?shù)?b class='flag-5'>單片機(jī)內(nèi)部的存儲(chǔ),使
    的頭像 發(fā)表于 09-02 09:47 ?1487次閱讀

    轉(zhuǎn)載文章: 單片機(jī)初學(xué)者進(jìn)階之編程

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

    一個(gè)暑假如何學(xué)習(xí)單片機(jī)

    一個(gè)暑假是學(xué)習(xí)和掌握單片機(jī)基礎(chǔ)知識(shí)的良好時(shí)機(jī)。以下是一個(gè)關(guān)于如何在暑假期間學(xué)習(xí)單片機(jī)的建議計(jì)劃
    的頭像 發(fā)表于 07-03 09:19 ?598次閱讀
    一個(gè)暑假如何學(xué)習(xí)<b class='flag-5'>單片機(jī)</b>

    如何系統(tǒng)、科學(xué)地自學(xué)單片機(jī)?

    很多初學(xué)者都會(huì)面臨這個(gè)問題,我想學(xué)習(xí)單片機(jī)、我也想學(xué)好單片機(jī)、我也想系統(tǒng)地學(xué)習(xí)單片機(jī),但是單片機(jī)涉及到的學(xué)科多且雜根本不是三天兩天就能學(xué)完的,很多人都逃脫不了從入門到放棄的怪圈?那么我
    的頭像 發(fā)表于 03-28 08:03 ?1214次閱讀
    如何系統(tǒng)、科學(xué)地自學(xué)<b class='flag-5'>單片機(jī)</b>?

    單片機(jī)是什么?單片機(jī)編程如何入門?

    單片機(jī)其實(shí)是一種很早的叫法了,最開始我們的前輩叫單板機(jī)或者叫單片機(jī),因?yàn)槟莻€(gè)時(shí)候單片機(jī)的處理能力還沒有很強(qiáng),現(xiàn)在我們所用的基本都是微型處理單元,也叫為控制器也稱之為MCU
    的頭像 發(fā)表于 03-28 08:03 ?2267次閱讀
    <b class='flag-5'>單片機(jī)</b>是什么?<b class='flag-5'>單片機(jī)</b>編程如何入門?