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

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

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

3天內不再提示

單片機中的堆棧詳細資料說明

電子工程技術 ? 來源:未知 ? 2019-03-03 11:24 ? 次閱讀

因為單片機CPU、存儲器、IO等等,使他(人性化一點以配合下文)看起來就像一個比較小的計算機,所以,在理解單片機的時候如果能把你之前有的那些也許僅僅是直覺上的對計算機的理解融入進來的話,可能會對你學習單片機的概念有極大的幫助,至少對于我是這樣的。

我想在關于單片機的眾多讓你頭暈腦脹、摸不著頭腦甚至想撞墻的概念里面,“堆棧”可能是其中最可惡的一個,因為即使單單是從漢語的角度來理解這個詞就已經讓你很暈了,其實我最初也想不通這是哪位大俠的創意,不過不用擔心,這里我們完全不去討論關于這個詞的問題(這個詞用得其實很好“堆”和“棧”都有他們各自的意思,準確的概括了這個區域的功能,有興趣可以Baidu一下),這里我會打一個比較有趣的比方,以此來繞過那些令你想撞墻的概念,并使你在直覺上對“堆棧”這個概念有一個深刻的理解。

你基本上應該清楚,單片機里面是有存儲區和CPU的,如果你不清楚,那么我剛剛告訴你了,請記住。現在,請你把單片中的CPU想成一個人(你完全可以把他想成是你宿舍的那個天天和你吵嘴的同學,一會你就會發現這會非常有趣),在這里就叫他C哥吧,不過這個人不同于常人,有一些特點,一會我們會慢慢說清楚,現在要告訴你的關于這個人的第一個特點是:他的記憶能力很差。下面,請你把存儲區想象成一個一個排好的小盒子,這些盒子的作用大致可以分成兩類:1、保存寫有你命令的紙條,比如你在某個盒子里面的紙條上寫著:去洗我的襪子!;2、保存你的一些東西,比如你那雙正在污染宿舍空氣的臭襪子。因為C哥是一個記憶力不怎么好的人,所以,這些盒子都有自己的編號,以方便他查找。

那么,現在,我們可以來說明一下單片機是如何工作的了。首先,你要把所有的命令還有需要處理的東西放進那些小盒子,比如剛才提到的你那雙待洗的襪子還有那張紙條,這時你應該發現C哥另一個特點:笨——他只會做你明確告訴他的事情,也就是說,如果你沒有在紙條上寫“去洗我的襪子!”,那么C哥極有可能會無動于衷地看著你的襪子直到他被熏暈倒,當然,更可能的情況是他根本找不到你的襪子…好了,當你把要做的事情和該怎么做寫到盒子里之后,下面的任務就交給C哥了。C哥做事真的很講原則,他會按照你給定的順序或者——如果你沒有給定的話,根據盒子上面的編號按照從小到大的順序——一個一個地打開盒子,讀取里面的命令、處理相應的事件,直到所有的事情都執行完畢,他就會休息。請你牢記這個簡單而有趣的過程,因為其實單片機就是這樣工作的,當然,這里忽略了許多細節,但是這對你從直覺上理解單片機的概念以及足夠了。

下面,就要開始說明堆棧這個概念了,思來想去,還是覺得如果直接把“堆棧”這個詞用到文中來,實在不符合本文的風格,考慮到其實“堆棧”也是存貯區(這一點你要記住,堆棧并不是一個像專用寄存器那樣專門的一個區域,它是由你在通用RAM區指定的。),按照本文的說法也就是一些盒子,所以,現在我們把“堆棧”改名叫“記憶盒子”,你可以感覺到,“堆棧”的作用和記憶有極大的關系,不過你也不用在這里糾結這個名字的由來,下面我會說的。

現在,請注意,我要開始解釋“記憶盒子”了,也就是“堆棧”。大致上說,“記憶盒子”的作用是當C哥執行某任務到一半的時候突然有了更緊急的是事情要執行的時候用來保存當前任務的(包括盒子的編號和盒子里面的東西)。這么說你肯定暈了,其實,通俗一點,就是當C哥洗襪子洗到一半的時候突然接到你的命令要去打開另一個盒子(那個盒子里的紙條上可能寫著“給我換尿布”)并執行里面的命令,因為C哥記憶力很差,以至于他做完那件緊急的事情后記不起要回到哪個盒子來繼續執行“洗襪子”這個命令,這時候,他要把現在手頭的東西保存到“記憶盒子”里,要保存的東西有:1、放著紙條和襪子的盒子的編號(注意這里其實是兩項內容);2、那雙襪子。這樣,當他執行完緊急任務后會去記憶盒子里,從里面找到兩張紙條,和一雙襪子(這個時候C哥還是沒有想起來他要洗襪子,他必須要到那張寫著洗襪子命令的紙條),他按照兩張紙條的信息知道自己要去哪個盒子去洗襪子,并在那里繼續完成洗襪子的任務。你可能會發現,在這一段的解釋里面有一個重要的漏洞,那就是在C哥執行完緊急任務后他是如何知道儲存著原來的任務信息的盒子的編號是存儲在哪個“記憶盒子”里呢?別著急,下面我會解釋的。

從本質來說,“記憶盒子”與普通的盒子是沒有區別的,他們都是單片機里面的存儲單元,證明這一點的最好證據就是堆棧是需要你來指定的,也就是說,你要預先把一些盒子指定為“記憶盒子”。下面,說明一下是如何指定“記憶盒子”的。其實這個過程很簡單,在單片機的專用寄存器里面有一個SP指針(81H),這個指針里面記錄著堆棧的開始處的地址。用符合本文的話來解釋就是,C哥的衣服上有一個口袋(也就是SP指針),這個口袋里面的“神奇紙條”上記錄著第一個“記憶盒子”的編號,而指定“記憶盒子”的過程就是你在這張“神奇紙條”上寫上一個盒子的編號(作為第一個“記憶盒子”的編號),這個紙條會自動地將紙條上的編號加1或者減1,所以,某個目前并不確定的區域內盒子具備了成為“記憶盒子”的可能,注意,堆棧的大小是不能規定的,這就是為什么用“生長”這個詞來形容堆棧。

現在,關于堆棧的概念基本上都介紹完了,但是,我知道,你可能還是很暈,甚至比看之前還暈,那是因為剛才敘述的這個過程是分開的,而且邏輯上并不是順序的,下面,順序的說一下,相信你馬上就明白了。

主角仍然是傻傻笨笨但任勞任怨的C哥,他一個一個的打開盒子按照里面的紙條上的說明執行你規定的任務。而你,為了防止他在執行復雜任務時犯傻,把一個盒子指定為“記憶盒子”,并把這個“記憶盒子”的位置寫在了一張 “神奇紙條”上放在了C哥的口袋里。現在,C哥正在洗你的襪子,這個時候,他突然接到你的命令要去給你換尿布,而C哥知道自己很笨,所以他自動地掏出了口袋里的紙條,找到了第一個“記憶盒子”,然后拿出一張空白紙條,把裝著“給我洗襪子”那張紙條的盒子的編號寫在了上面并放進“記憶盒子”。然后,他把“神奇紙條”放回了口袋里。當這個任務完成后“神奇紙條”會自動將寫在它上面的編號加1,也就是將一個新的、空的“記憶盒子”的編號寫在上面。之后,他會按照剛才的過程把裝著襪子的那個盒子的編號以及襪子本身分別放進不同的記憶盒子(現在已經有三個盒子成為“記憶盒子”,堆棧已經長大了,紅色下劃線的字體就是這三個盒子里的內容,注意是有先后順序的)。再然后,他就去給你換尿布了…

現在,尿布換完了,不過,果不其然,C哥完全忘記了他要給你洗襪子這件事情了,不過,他記得一件事,那就是看口袋里的紙條。于是,他摸出了口袋里的紙條,上面當然是一個“記憶盒子”的編號,他按照編號找到了第一個“記憶盒子”(按照上一段的順序應該是第三個“記憶盒子”),里面應該是一雙你的襪子,于是他拿到了你的襪子。但是,他還是不知道該干什么,于是他再次摸出了“神奇紙條”,這時,紙條上的編號已經自動減1了,于是,他找到了新的“記憶盒子”,里面的紙條上記錄著襪子本來放置的盒子的編號,于是,他把襪子放到了那個盒子里。恩,你可以想到,現在C哥還是不知道要對襪子做些什么,他耐心的又一次摸出了那張“神奇紙條”,這次按照上面的編號,他找到了一張紙條,上面寫著的仍然是一個盒子的編號。C哥按照編號找到了那個盒子,發現那個盒子里的紙條上寫著“給我洗襪子!”…至此,C哥又回到了原來的任務——洗襪子。

現在,我希望你已經明白了,堆棧其實就是你指定的一個些存儲單元,這些存儲單元被指定只用來保存一些特殊信息,比如地址(保護斷點)或者一些數據(保護現場),如果你一定要說這個存儲區有什么特別的話,那就是:1、這些存儲單元內的內容都是CPU在執行某任務中途被打斷時的一些相關參數;2、這些存儲單元的地址被記在了一個叫堆棧指針的地方,也就是C哥口袋里的那張紙條上!

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

    關注

    6041

    文章

    44616

    瀏覽量

    637442
  • 存儲器
    +關注

    關注

    38

    文章

    7525

    瀏覽量

    164162
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10900

    瀏覽量

    212626

原文標題:一個故事看懂單片機中的堆棧(完整版)

文章出處:【微信號:EngicoolArabic,微信公眾號:電子工程技術】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    單片機應用的編程100問題和答案的詳細資料說明

    本文檔的主要內容詳細介紹的是單片機應用的編程100問題和答案的詳細資料說明
    發表于 03-07 16:06 ?11次下載
    <b class='flag-5'>單片機</b>應用的編程100問題和答案的<b class='flag-5'>詳細資料</b><b class='flag-5'>說明</b>

    單片機入門教程之單片機的輸入與輸出口的詳細資料說明

    本文檔的主要內容詳細介紹的是單片機入門教程之單片機的輸入與輸出口的詳細資料說明包括了:1 、 P0口,2 、 P1口,3 、P2口,4 、
    發表于 04-01 08:00 ?11次下載
    <b class='flag-5'>單片機</b>入門教程之<b class='flag-5'>單片機</b>的輸入與輸出口的<b class='flag-5'>詳細資料</b><b class='flag-5'>說明</b>

    單片機詳細資料分析

    單片機詳細資料分析
    發表于 09-10 17:26 ?0次下載

    51單片機的匯編指令詳細資料說明

    本文檔的主要內容詳細介紹的是51單片機的匯編指令詳細資料說明
    發表于 08-30 17:28 ?15次下載
    51<b class='flag-5'>單片機</b>的匯編指令<b class='flag-5'>詳細資料</b><b class='flag-5'>說明</b>

    51單片機的應該如何使用定時器詳細資料和實例說明

    本文檔的主要內容詳細介紹的是51單片機的應該如何使用定時器詳細資料和實例說明
    發表于 08-29 17:28 ?2次下載
    51<b class='flag-5'>單片機</b>的應該如何使用定時器<b class='flag-5'>詳細資料</b>和實例<b class='flag-5'>說明</b>

    51單片機例函數的詳細資料說明

    本文檔的主要內容詳細介紹的是51單片機例函數的詳細資料說明
    發表于 08-28 17:29 ?8次下載
    51<b class='flag-5'>單片機</b>例函數的<b class='flag-5'>詳細資料</b><b class='flag-5'>說明</b>

    51單片機IIC協議的詳細資料說明

    本文檔的主要內容詳細介紹的是51單片機IIC協議的詳細資料說明
    發表于 06-26 17:43 ?7次下載
    51<b class='flag-5'>單片機</b><b class='flag-5'>中</b>IIC協議的<b class='flag-5'>詳細資料</b><b class='flag-5'>說明</b>

    51單片機的中斷系統詳細資料說明

    本文檔的主要內容詳細介紹的是51單片機的中斷系統詳細資料說明
    發表于 06-14 17:45 ?3次下載
    51<b class='flag-5'>單片機</b>的中斷系統<b class='flag-5'>詳細資料</b><b class='flag-5'>說明</b>

    使用STM32單片機實現IAP的詳細資料說明

    本文檔的主要內容詳細介紹的是使用STM32單片機實現IAP的詳細資料說明。先說一下實現的功能 IAP程序的功能
    發表于 05-17 18:04 ?28次下載
    使用STM32<b class='flag-5'>單片機</b>實現IAP的<b class='flag-5'>詳細資料</b><b class='flag-5'>說明</b>

    51單片機匯編語言教程之單片機條件轉移指令的詳細資料說明

    本文檔的主要內容詳細介紹的是51單片機匯編語言教程之單片機條件轉移指令的詳細資料說明
    發表于 06-04 16:25 ?15次下載
    51<b class='flag-5'>單片機</b>匯編語言教程之<b class='flag-5'>單片機</b>條件轉移指令的<b class='flag-5'>詳細資料</b><b class='flag-5'>說明</b>

    單片機的常量和變量與數組的詳細資料說明

    本文檔的主要內容詳細介紹的是單片機的常量和變量與數組的詳細資料說明包括了:單片機的常量,單片機
    發表于 12-11 17:36 ?13次下載
    <b class='flag-5'>單片機</b>的常量和變量與數組的<b class='flag-5'>詳細資料</b><b class='flag-5'>說明</b>

    什么是單片機單片機的歷史和應用等詳細資料說明

    本文檔的主要內容詳細介紹的是什么是單片機單片機的歷史和應用等詳細資料說明
    發表于 12-13 16:01 ?7次下載
    什么是<b class='flag-5'>單片機</b>?<b class='flag-5'>單片機</b>的歷史和應用等<b class='flag-5'>詳細資料</b><b class='flag-5'>說明</b>

    單片機原理及應用的詳細資料說明

    本文檔的主要內容詳細介紹的是單片機原理及應用的詳細資料說明包括了:單片機芯片的硬件結構, MCS-51
    發表于 12-26 10:34 ?20次下載
    <b class='flag-5'>單片機</b>原理及應用的<b class='flag-5'>詳細資料</b><b class='flag-5'>說明</b>

    單片機匯編讀寫SPI FLASH的詳細資料說明

    本文檔的主要內容詳細介紹的是單片機匯編讀寫SPI FLASH的詳細資料說明
    發表于 08-14 10:45 ?20次下載

    使用單片機實現流水燈的詳細資料說明

    本文檔的主要內容詳細介紹的是使用單片機實現流水燈的詳細資料說明
    發表于 03-21 16:41 ?7次下載
    使用<b class='flag-5'>單片機</b>實現流水燈的<b class='flag-5'>詳細資料</b><b class='flag-5'>說明</b>
    主站蜘蛛池模板: 国产精品久久高潮呻吟无码| 夜色福利院在线观看免费| 十分钟视频影院免费| 99久久夜色精品国产亚洲AV卜| 精品亚洲大全| 无码欧美XXXXX在线观看裸| 成人免费视频网站www| 日本精品久久久久中文字幕| 别插我B嗯啊视频免费| 日本50人群体交乱| 闺蜜撬开我的腿用黄瓜折磨我| 色视频色露露永久免费观看| 国产盗摄一区二区三区| 午夜向日葵视频在线观看| 大胸美女脱内衣黄网站| 日韩欧无码一区二区三区免费不卡| 99午夜高清在线视频在观看| 欧美性猛交XXXX乱大交极品| 成人免费小视频| 网红刘婷hd国产高清| 国产亚洲精品久久综合阿香 | 色欲AV亚洲永久无码精品麻豆| WWW国产亚洲精品久久久日本| 入室强伦女教师被学生| 国产人妻人伦精品1国产| 亚洲中文字幕欧美自拍一区| 美女脱三角裤| yellow视频免费观看| 偷拍亚洲色自拍| 精品国产乱码久久久久久人妻| 在线免费观看日本| 亲嘴扒胸摸屁股视频免费网站| 冰山高冷受被c到哭np双性| 少妇性饥渴BBBBBBBBB| 果冻传媒AV精品一区| 24小时日本高清免费看| 日韩亚洲国产中文字幕欧美| 花蝴蝶在线观看免费8| av在线观看地址| 亚洲 欧美 国产 综合 在线| 恋夜影视列表免费安卓手机版|