嵌入式_堆棧、c語言涉及、C語言基礎

一、堆棧

1、堆棧的定義

• 堆棧是一個特定的存儲區或寄存器,它的一端是固定的(棧底),另一端是浮動的(棧頂),主要用於函數調用、中斷切換時保存和恢復現場數據及局部變量的臨時保存。
• 所有的數據存入或取出,只能在浮動的一端(稱棧頂)進行,嚴格按照“先進後出”
(FILO—First-In/Last-Out)的原則存取,位於其中間的元素,必須在其棧上部(後進棧者)諸元素逐個移出後才能取出。
• 在內存儲器(隨機存儲器)中開闢一個區域作爲堆棧,叫軟件堆棧;用寄存器構成的堆棧,叫硬件堆棧。
• 單片機應用中,堆棧是個特殊存儲區,堆棧屬於RAM空間的一部分,堆棧堆棧中的物體具有一個特性:第一個放入堆棧中的物體總是被最後拿出來, 這個特性通常稱爲先進後出(FILO—First-In/Last-Out)。 堆棧中定義了一些操作, 兩個最重要的是PUSH和POP。

堆棧的操作

1、PUSH(入棧)操作:將數據存放到堆棧中。堆棧指針(SP)加1,然後在堆棧的頂部加入一 個元素。
2、 POP(出棧)操作:從堆棧中彈出數據。先將SP所指示的內部ram單元中內容送入直接地址尋址的單元中(目的位置),然後再將堆棧指針(SP)減1。這兩種操作實現了數據項的插入和刪除。
3、堆棧長度:棧空間的大小
4、棧底(Bottom):棧底指向的是堆棧段中地址最大的字單元。
5、棧頂(Top):棧頂是堆棧指針SP指向的位置。
6、堆棧的生長方式
• 向上生長:當壓入操作後,堆棧指示器SP向地址增大方向變化。
• 向下生長:當壓入操作後,堆棧指示器SP向地址減小方向變化。
絕大多數計算機採用向下生長方式。
7、空棧:在進行堆棧操作前,爲空棧。此時SP應預置一個初值。該值爲堆棧空間的大小。SP初值=堆棧空間的最大容量。例:SP=0008H。則最大容量爲8個字節。SP指向當前的棧頂。

二、c語言涉及

(一)、頭文件

#include僞指令可將頭文件包含到程序中。編譯器編譯預處理時用文件包含的正文件內容替換到實際程序中。可帶或不帶路經。
• 頭文件可分爲標準頭文件和自定義頭文件:
➢ <>內的頭文件爲系統標準頭文件,由開發環境或系統提供。它在環境變量
include指定的系統目錄的標準列表中搜索。
➢ “”內的頭文件爲用戶自定義頭文件。搜索時,首先在當前目錄中搜索,再按
環境變量include指定的系統目錄的標準列表中搜索。
• 建議將所有常量、宏、系統全局變量和函數原型保存到頭文件中。
• #include只用於編譯,只檢查語法,不進行文件鏈接,不檢查 .h中
的函數是否有定義。

(二)、常用關鍵詞

在這裏插入圖片描述

常用預處理僞命令

在這裏插入圖片描述

(三)、宏定義

宏定義僞指令分爲:不帶參數宏定義和帶參數宏定義。
(1)不帶參數宏定義
格式如下:
define 宏標識符 宏體
• 宏體是由單詞序列組成。宏體超長時,允許使用續行符“\”進行續行,續行符和其後
的換行符 \n 都不會進入宏體。
• 應儘量避免使用C語言的關鍵字和預處理器的預定義宏,以免引起災難性後果。
• 在源文件中,用預處理器僞指令定義過宏標識符之後,就可用宏標識編寫程序。當源
文件被預處理器處理時,每遇到該宏標識符,預處理器便將宏展爲宏體。
•“預處理”是指在對C語言源程序進行編譯之前,要先對程序中的“宏定義、文件包含、條件編譯”等特殊命令進行預先處理。
• 注意:
(1) 宏名爲了與變量名區別一般用大寫字母表示。
(2) 宏展開時只用文本串替換宏名,不作正確性檢查。
(3) 宏定義行末尾不能加分號。加分號,宏展時會當作文本串字符一同代入。
(4) 宏名的有效範圍是:從定義位置開始到本文件結束
(5) 可以用#undef命令終止宏定義的作用域。
(6) 在宏定義時,可以引用已定義的宏名。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章