ATmega88 堆栈指针

发布者:ziyunting最新更新时间:2021-12-08 来源: eefocus关键字:ATmega88  堆栈  指针 手机看文章 扫描二维码
随时随地手机看文章

堆栈指针主要用来保存临时数据、局部变量和中断/ 子程序的返回地址。堆栈指针总是指向堆栈的顶部。要注意AVR 的堆栈是向下生长的,即新数据推入堆栈时,堆栈指针的数值将减小。

堆栈指针指向数据SRAM 堆栈区。在此聚集了子程序堆栈和中断堆栈。ATmega88 在调用子程序和使能中断之前必须定义堆栈空间,且堆栈指针必须指向高于0xFF 的地址空间。使用PUSH指令将数据推入堆栈时指针减一;而子程序或中断返回地址推入堆栈时指针将减二。使用POP 指令将数据弹出堆栈时,堆栈指针加一;而用RET 或RETI 指令从子程序或中断返回时堆栈指针加二。

AVR的堆栈指针由I/O空间中的两个8位寄存器实现。实际使用的位数与具体器件有关。请注意某些AVR 器件的数据区太小,用SPL 就足够了。此时将不给出SPH 寄存器。


关键字:ATmega88  堆栈  指针 引用地址:ATmega88 堆栈指针

上一篇:ATmega88 指令执行时序
下一篇:ATmega88 通用寄存器

推荐阅读最新更新时间:2024-11-12 11:11

STM32的堆栈(Heap&Stack)空间
最近做的一个项目遇到一个很莫名的错误,程序运行到某一部分时便会卡死,分析后,感觉在逻辑上并无错误,但是就是会卡死,而且不是偶然。 后来在网上查找资料怀疑是内存溢出,然后调试发现是两个函数中的的局部变量申请的内存空间太大,所以错误应该是栈溢出了。将这两个变量使用malloc申请堆段空间完美解决。 下面是对STM32的堆栈(Heap&Stack)小结: 内存分配空间 内核保护区 栈段 堆段 数据区 代码区 代码区 :静态区 常量(const) 函数代码逻辑 数据区:静态区 全局变量 局部变量+static 堆段:动态区,管理者是程序员 malloc申请的空间 栈段:动态区,管理每个子函数的空间,管理者是
[单片机]
STM32的<font color='red'>堆栈</font>(Heap&Stack)空间
堆栈的一些基本概念
向上生长:向高地址方向生长,称为递增堆栈 向下生长:向低地址方向生长,称为递减堆栈 堆栈指针指向最后压入堆栈的有效数据项,称为满堆栈;堆栈指向下一个要放入的空位置,称为空堆栈;有四种类型的堆栈表示递增和递减的满堆栈和空堆栈的各种组合。 满递增:堆栈通过增大存储器的地址向上增长,堆栈指针指向内含有效数据项的最高地址。指令如LDMFA,STMFA等。 空递增:堆栈通过增大存储器的地址向上增长,堆栈指针指向堆栈的第一个空位置。指令如LDMEA,SRMEA等。 满递减:堆栈通过减小存储器的地址向下增长,堆栈指针指向内含有数据项的最低地址。指令如LDMFD,STMFD等。 空递减:堆栈通过减小存储
[单片机]
怎样采用指针式万用表查找小功率直流电动机故障
小功率直流电动机是依靠直流电压进行工作的,广泛应用于各种小型机电设备、各种自动控制电器设备、日用电气设备中。 (1)电磁式直流电动机和永磁式直流电动机故障检测方法。对于小功率电磁式直流电动机和永磁式直流电动机发生的不运转或转速变慢等故障,可先采用指针式万用表电阻挡对电动机的励磁线圈(定子线圈绕组)进行检查,看其是否有短路或开路现象,电枢(转子)绕组有无短路或开路现象,子稳速电路是否损坏等。 (2)故障检测方法。对于无刷直流电动机发生的不运转或转速异常故障,除了采用指针式万用表欧姆挡对电动机的励磁绕组(定子绕组)进行检查,看其是否有短路或开路现象外,还应检查转子位置传感器与电子换向电路是否有问题。
[测试测量]
详细解析STM32中的堆栈机制
刚拿到STM32时,你只编写一个死循环 编译后,就会发现这么个程序已用了1600多的RAM,这要是在51单片机上,会心疼死了,这1600多的RAM跑哪儿去了,分析.map文件,你会发现是堆和栈占用的 在startup_stm32f10x_md.s文件中,它的前面几行就有以下定义: 这下明白了吧,STM32在启动的时候,RAM首先分配给使用到的全局变量,还有调用库占用的一些数据(不太清楚是什么数据),然后再将剩余的空间分配给Heap和Stack。由于内存空间是启动时实现分配好的,所以当动态分配内存的需求过多的时候,就会产生堆栈空间不足的问题。 查阅网上的资料,理解堆和栈的区别: - (1)栈区(stack):由编译器自动
[单片机]
详细解析STM32中的<font color='red'>堆栈</font>机制
MF47指针式万用表运用办法
下面联络MF47型万用表,介绍一下指针式万用表的构造。 MF47型万用表是一种高活络度、多量程的便携式整流系外表,能结束交直流电压、直流电流、电阻等底子项意图丈量,还能估测电容器的功用等。MF47型万用表外形如图1所示,不和有电池盒。 ①表头:表头是万用表的首要构成有些,决议了万用表的活络度。表头由表针、磁路体系和偏转体系构成。为了行进丈量的活络度和便于拓展电流的量程,表头通常都选用内阻较大、活络度较高的磁电式直流电流表。别的,表头上还设有机械调零旋钮,用以校对表针在左端的零位。 万用表的表头是一个活络电流表,电流只能从正极流入,从负极流出。在丈量直流电流的时分,电流只能从与“+”插孔相连的红表笔流入,从与“-”插孔相连的黑
[测试测量]
STM32硬件IIC
1 /** 2 * @brief 写一个字节到I2C设备中 3 * @param 4 * @arg pBuffer:缓冲区指针 5 * @arg WriteAddr:写地址 6 * @retval 正常返回1,异常返回0 7 */ 8 uint8_t I2C_ByteWrite(u8 pBuffer, u8 WriteAddr) 9 { 10 /* Send STRAT condition */ 11 I2C_GenerateSTART(macI2Cx, ENABLE); 12 13 I2CTimeout = I2CT_FLAG_TIMEOUT; 14 15 16 /*
[单片机]
指针式万用表测量二极管方法图解
普通的检测是根据二极管的单向导电性,通过测量二极管的正、反向电阻,可方便地判断二极管的好坏。一般将拨到rx1k档,用黑表笔接二极管的正极,红表笔接二极管的负极,称为正向测量,正向测量所得的阻值称为正向电阻,如图1所示,图中实测正向电阻为5.2kω。一般二极管的正向电阻值为几千欧,此值愈小愈好。将万用表的黑表笔接二极管的负极,红表笔接二极管的正极,称为反向测量,反向测量所得的阻值称为反向电阻,如图2所示,图中实测反向电阻为无穷大。 图1 用指针万用表正向测量二极管 图2 用指针万用表反向测量二极管 对于二极管,正向测量时,若二极管导通(指针大幅度偏转),而反向测量时,二极管不通(指针不偏转)说明二极管良好。若正向测量或反向测
[测试测量]
用<font color='red'>指针</font>式万用表测量二极管方法图解
关于KeilC51的指针
  keil中的指针分为两种,一种是普通指针,兼容标准C语言的指针;另一种是我翻译成内存特殊指针(memory-specific pointers,翻译的不好: )      一、普通指针   普通指针的定义方式如下, char * ptr; 跟标准C的定义方式一样。这种指针占三个字节。第一个字节是标识存储类型,是指针指向的变量的数据类型。 第二个字节是指针存储地址的高位字节。第三个字节是指针存储地址的低位字节。   普通指针默认存储在内部存储器data,即片上RAM。如果想指定指针的存储位置,可以在 * 后加上存储类型,如下面几种定义方式: char * data ptr; //与char * ptr;等价,即默认的定义方
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved