嵌入式_堆栈、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) 在宏定义时,可以引用已定义的宏名。

猜你喜欢

转载自blog.csdn.net/Kattlin_gsc/article/details/106845657