0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于单片机堆栈操作:堆栈是单片机中的存储单元

454398 来源:博客园 作者:Andrew_qian 2020-10-21 17:32 次阅读

看关于单片机方面的书籍的时候,总是能看到别人说的一些堆栈啊什么的操作,之前看到这个术语就直接跳过,没想到去探究单片机内部的原理。但是最近课程学习微机原理这门课,需要我们写汇编程序,汇编里面经常遇到堆栈这个东西,所以就找了个时间把堆栈给彻底的搞一下。

如果了解一点汇编编程话,就可以知道,堆栈是内存中一段连续的存储区域,用来保存一些临时数据。通常用来保存CALL指令调用子程序时的返回地址,RET指令从堆栈中获取返回地址。中断指令INT调用中断程序时,将标志寄存器值、代码段寄存器CS值、指令指针寄存器IP值保存在堆栈中。

堆栈也可以用来保存其他数据。

堆栈操作由PUSH,POP两条指令来完成;

堆栈操作的操作数均为子类型(两个字节)进行操作。

程序内存可以分为几个区,栈区(stack),堆区(Heap),全局区(static),文字常亮区,程序代码区。

程序编译之后,全局变量,静态变量已经分配好内存空间,在函数运行时,程序需要为局部变量分配栈空间,当中断来时,也需要将函数指针入栈,保护现场,以便于中断处理完之后再回到之前执行的函数。

栈是从高到低分配,堆是从低到高分配。

我们一般说的堆栈指的栈。堆栈又分硬堆栈和软堆栈,硬堆栈即SP,从片内RAM的顶部向下生长。软堆栈在硬堆栈跟全局变量区之间的空间,C51函数调用通过R0-R7和栈来实现。

为什么单片机启动时,不需要用bootloader将代码从ROM搬移到RAM,而ARM则需要。这里我们可以先看看单片机程序执行的过程,单片机执行分三个步骤,取执行---分析指令----执行指令。取指令的任务是:根据PC的值从程序存储器读出指令,送到指令寄存器。然后分析执行执行。这样单片机就从内部程序存储器去代码指令,从RAM存取相关数据。要知道RAM取数的速度是远高于ROM的,但是单片机因为本身运行频率不高,所以从ROM取指令慢并不影响。而ARM不同,cpu运行的频率高,远大于从ROM读写的速度,所以一般有操作系统,都需要将代码部分拷贝到RAM中再执行。

再来看一个网上很流行的经典例子:

main.cpp

int a = 0; 全局初始化区

char *p1; 全局未初始化区

main()

{

int b; 栈

char s[] = “abc”; 栈

char *p2; 栈

char *p3 = “123456”; 123456/0在常量区,p3在栈上。

static int c =0; 全局(静态)初始化区

p1 = (char *)malloc(10); 堆

p2 = (char *)malloc(20); 堆

}

不知道你是否有点明白了,堆和栈的第一个区别就是申请方式不同:栈(英文名称是stack)是系统自动分配空间的,例如我们定义一个 char a;系统会自动在栈上为其开辟空间。而堆(英文名称是heap)则是程序员根据需要自己申请的空间,例如malloc(10);开辟十个字节的空间。由于栈上的空间是自动分配自动回收的,所以栈上的数据的生存周期只是在函数的运行过程中,运行后就释放掉,不可以再访问。而堆上的数据只要程序员不释放空间,就一直可以访问到,不过缺点是一旦忘记释放会造成内存泄露。

网上一个很好的比喻,摘抄下来,以便理解:

使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。

使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。

总结:

其实堆栈就是单片机中的一些存储单元,这些存储单元被指定保存一些特殊信息,比如地址(保护断点)和数据(保护现场)。

如果非要给他加几个特点的话那就是:1、这些存储单元中的内容都是程序执行过程中被中断打断时,事故现场的一些相关参数。如果不保存这些参数,单片机执行完中断函数后就无法回到主程序继续执行了。

2、这些存储单元的地址被记在了一个叫做堆栈指针(SP)的地方。

好了,以上就是这些。
编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6036

    文章

    44555

    浏览量

    634879
  • 寄存器
    +关注

    关注

    31

    文章

    5342

    浏览量

    120277
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1368

    浏览量

    114658
  • Call
    +关注

    关注

    0

    文章

    9

    浏览量

    8327
  • 堆栈
    +关注

    关注

    0

    文章

    182

    浏览量

    19755
收藏 人收藏

    评论

    相关推荐

    单片机Debug工具性能对比 单片机调试常用命令

    单片机(Microcontroller Unit, MCU)调试是嵌入式开发的一个重要环节,它帮助开发者发现和修复代码的错误,优化程序性能。不同的单片机和开发环境可能使用不同的调试
    的头像 发表于 12-19 09:56 176次阅读

    MCU与单片机的区别

    在现代电子技术领域,微控制单元(MCU)和单片机是两个经常听到的术语。尽管它们在某些方面有相似之处,但它们在设计、功能和应用上存在显著差异。 一、定义与基本概念 1.1 微控制单元(MCU) 微控制
    的头像 发表于 11-11 14:50 689次阅读

    单片机在工业自动化的应用

    随着科技的不断进步,单片机技术在工业自动化领域扮演着越来越重要的角色。 1. 引言 单片机是一种集成了处理器核心、存储器、输入/输出接口等组件的微型计算机。它们通常用于控制嵌入式系统,如家
    的头像 发表于 11-01 14:15 276次阅读

    单片机怎么写入程序

    单片机(Microcontroller Unit,MCU)是一种集成威廉希尔官方网站 芯片,它将计算机的CPU、存储器、输入/输出接口等功能集成在一个芯片上。单片机广泛应用于嵌入式系统和物联网设备
    的头像 发表于 10-21 11:21 435次阅读

    51单片机的主要逻辑功能部件是什么

    部件的操作。它包括算术逻辑单元(ALU),用于执行算术和逻辑运算。 2. 存储器 程序存储器(ROM):用于存储程序代码,通常是
    的头像 发表于 10-18 12:49 403次阅读

    单片机的中断机制

    单片机的中断机制是一种重要的处理方式,它允许单片机在执行主程序的过程,能够暂停当前任务,转而处理外部或内部紧急事件。这种机制极大地提高了系统的响应速度和处理能力,使得单片机在各种应用
    的头像 发表于 10-17 18:03 634次阅读

    单片机烧录程序可以重新烧吗

    好的程序代码通过特定的方式写入单片机存储,使其能够按照预定的逻辑执行任务。单片机烧录程序可以重新烧录,这是单片机编程和开发过程
    的头像 发表于 09-02 10:04 1214次阅读

    单片机烧录程序的线比单片机上的少还能烧录吗

    单片机烧录原理 单片机烧录是指将编写好的程序代码通过一定的方式传输到单片机存储,使其能够按照程序的指令运行。这个过程通常需要使用烧录器
    的头像 发表于 09-02 09:54 487次阅读

    单片机烧录程序的基本步骤是什么

    单片机烧录程序是单片机开发过程中非常重要的一步,它涉及到将编写好的程序代码通过一定的方式传输到单片机内部的存储,使
    的头像 发表于 09-02 09:47 1014次阅读

    转载文章: 单片机初学者进阶之编程

    、寄存器B(但仅限于乘法指令)、数据指针DPTR、位操作指令的进位标志Cy、工作组寄存器R7~R0。 3.直接寻址 操作数放在单片机的内部RAM的某个
    发表于 07-08 17:17

    一个暑假如何学习单片机

    一个暑假是学习和掌握单片机基础知识的良好时机。以下是一个关于如何在暑假期间学习单片机的建议计划
    的头像 发表于 07-03 09:19 521次阅读
    一个暑假如何学习<b class='flag-5'>单片机</b>

    单片机是什么?单片机编程如何入门?

    单片机其实是一种很早的叫法了,最开始我们的前辈叫单板机或者叫单片机,因为那个时候单片机的处理能力还没有很强,现在我们所用的基本都是微型处理单元,也叫为控制器也称之为MCU
    的头像 发表于 03-28 08:03 1888次阅读
    <b class='flag-5'>单片机</b>是什么?<b class='flag-5'>单片机</b>编程如何入门?

    单片机的最小系统由什么组成 单片机的最小系统包括哪些

    Unit,CPU)、存储器、输入输出接口威廉希尔官方网站 等核心功能,常见的单片机有以8051为代表的8位单片机、PIC系列单片机和AVR系列单片机等。
    的头像 发表于 02-02 11:27 1.1w次阅读

    单片机编程实例介绍

    单片机(Microcontroller)是指内部集成了处理器核心、存储器、输入输出接口和外围设备接口等功能模块的集成威廉希尔官方网站 芯片。它具有体积小、功耗低、性能高等优点,被广泛应用于嵌入式系统单片
    的头像 发表于 01-16 09:37 2618次阅读

    单片机原理及应用是什么

    单片机(Microcontroller)是一种集成威廉希尔官方网站 (IC)芯片,其中包括了中央处理器(CPU)、存储器和输入/输出(I/O)设备等功能模块。它是一种小型计算机系统,具有独立的工作能力和完整的计算
    的头像 发表于 01-12 15:28 2156次阅读