11.栈的初始化

发布者:清新家园最新更新时间:2024-10-22 来源: cnblogs关键字:初始化  ARM 手机看文章 扫描二维码
随时随地手机看文章

11.栈的初始化

1.栈的概念:

2.满/空栈:

 

 

 

 

 

 

 

 

 

 

1.3:升/降栈:

1.4.栈桢的理解:

 

局部变量是保存在栈中的:

Stack.c:

编译和反汇编

 

 

传递参数:

Func1:

保存寄存器的值:

Main:

Func1:

Func2:


关键字:初始化  ARM 引用地址:11.栈的初始化

上一篇:android平台6410背光修改
下一篇:12.bss段的初始化

推荐阅读最新更新时间:2026-03-21 23:08

ARM编程:ARM初始化,堆地址是怎样计算的
USR_STACK_LEGTH EQU 64 SVC_STACK_LEGTH EQU 0 FIQ_STACK_LEGTH EQU 16 IRQ_STACK_LEGTH EQU 64 ABT_STACK_LEGTH EQU 0 UND_STACK_LEGTH EQU 0 ; 名称:InitStack ; 功能:堆栈初始化,即初始化各模式下的堆栈指针。 ; 入口参数:无 ; 出口参数:无 ; 说明:在特权模式下调用此子程序,比如复位后的管理模式 InitStack
[单片机]
Part10-C语言环境初始化-初始化lesson1
1、概念解析 ARM系统使用的是满栈! ARM采用降栈!!! 栈帧 每一个进程会有一个栈,该进程中的每一个函数会分割栈的一部分,那么每一个函数使用的那部分栈就叫做栈帧。那么所有栈帧组成了整个栈。 子函数func里面保存了main函数的上边界FP和下边界SP。 2、栈的作用 保存局部变量 代码样例 编译之: arm-linux-gcc -g stack1.c -o stack1 反汇编之:arm-linux-objdump -D -S stack1 dump dump里面的结果 首先是push {sp},具体是将str fp, !,里面让sp先减4再存。加一个!号,表示使sp-4,但不会对sp本身有影响 add
[单片机]
Part10-C语言环境<font color='red'>初始化</font>-<font color='red'>栈</font><font color='red'>初始化</font>lesson1
基于S3C6410的ARM11学习(六) 核心初始化之关闭所有中断
上一次,我们完成了核心初始化之关闭看门狗了。下面就要关闭所有中断了。因为这个时候还在初始化整个硬件环境,应用程序还没有开始跑,所以是不希望有中断产生来打断CPU工作的。 中断是嵌入式系统中很重要的东西了。因为有了这个东西,可以使CPU解放出来,做更多的事。 学单片机的时候,对于按键,我们可以采用轮询检测,隔一段时间就去检测看看按键有没有按下,有按下的话就进行处理。没有的话就跳过。而使用外部中断后,就不必检测了,外部中断会自动检测,就不用CPU检测了。当外部中断有效后,外部中断模块就会产生一个中断源给CPU,CPU检测到这个中断源,再去执行对应的中断处理函数。比轮询法效率要高很多了。 至于S3C6410的中断的具体的一些
[单片机]
基于S3C6410的<font color='red'>ARM</font>11学习(六) 核心<font color='red'>初始化</font>之关闭所有中断
基于S3C6410的ARM11学习(十) 时钟初始化
之前已经用led验证了核心初始化的代码是可以用的了。接着就要进行到下一步,这一步就是时钟初始化,因为在时钟初始化之前,CPU的系统时钟都是跑在外部晶振12M上的,这速度也太慢了,S3C6410可是跑在600多M时钟上的。所以我们就需要对时钟进行配置,将系统时钟调高。 这时候,其实是可以初始化C所用环境,然后用c语言来写,不过为了练习编写汇编代码,就使用汇编代码来写了。 S3C6410的时钟是挺复杂的。比51单片机的时钟要是要复杂多了去了。下面是时钟的框图。 S3C6410共有3个PLL。PLL是时钟倍频用的。我使用的OK6410外部晶振是12M的。但是CPU的时钟是可以跑600多M的,这怎么实现的了。就是靠PLL来实
[单片机]
基于S3C6410的<font color='red'>ARM</font>11学习(十) 时钟<font color='red'>初始化</font>
ARM基础:为何C语言(的函数调用)需要堆,而汇编语言却不需要堆
之前看了很多关于uboot的分析,其中就有说要为C语言的运行,准备好堆栈。 而自己在Uboot的start.S汇编代码中,关于系统初始化,也看到有堆栈指针初始化这个动作。但是,从来只是看到有人说系统初始化要初始化堆栈,即正确给堆栈指针sp赋值,但是却从来没有看到有人解释,为何要初始化堆栈。所以,接下来的内容,就是经过一定的探究,试图来解释一下,为何要初始化堆栈,即: 为何C语言的函数调用要用到堆栈,而汇编却不需要初始化堆栈。 要明白这个问题,首先要了解堆栈的作用。 关于堆栈的作用,要详细讲解的话,要很长的篇幅,所以此处只是做简略介绍。 总的来说,堆栈的作用就是:保存现场/上下文,传递参数。 1.保存现场/上下文 现场
[单片机]
ARM处理器的堆和函数调用,以及与Sparc的比较
STACK AND FUNCTIONS In this part we will look into a special memory region of the process called the Stack. This chapter covers Stack’s purpose and operations related to it. Additionally, we will go through the implementation, types and differences of functions in ARM. 堆栈是进程的一个特殊内存区域。堆栈的使用对于不同处理器的实现是不一样的。介绍堆栈的实现,类型以
[单片机]
<font color='red'>ARM</font>处理器的堆<font color='red'>栈</font>和函数调用,以及与Sparc的比较
ARM学习笔记012之mini2440上电的启动和初始化程序分析
嵌入式系统中的boot Loader 的实现完全依赖于CPU 的体系结构,因此大多数Boot Loader 都分为第一阶段和第二阶段两大部分,依赖于CPU 体系结构的代码,比如设备初始 化代码等,通常都放在阶段1 中,而且通常都用汇编语言来实现,以达到短小精悍的目的。 而阶段2 则通常用C 语言来实现,这样可以实现一些复杂的功能,而且代码会具有更好的 可读性和可移植性。 第一阶段包括: (1)硬件设备的初始化 ①初始化GPIO 功能 ②设置CPU的速度和时钟频率 ③存储控制单元初始化 (2)拷贝Bootloader的程序到RAM空间中 (3)设置好堆栈 (4)跳转到阶段2的C人口地址 第二阶
[单片机]
三星2440 ARM初始化
一、利用三星已经写好的初始化文件 1。先见项目文件夹 2。建立项目保存在新建文件夹中 3。将ARM三星写好的INIT文件夹中的INC和SRC两个文件夹拖入新建文件夹中。 4。建立C文件,如LCD1602.c,编写void xmain()函数,或void xxxx()函数 5。添加SRC中的2440init到项目中来。 6。将2440init中的相应主函数入口修改为LCD1602.c中的函数xmain,这一点很重要,这样其他函数可通过添加头文件编写,否则没法执行。见下图 二、编写自己的初始化 1。先建项目文件夹 2。再建立项目并保存在新建文件夹中(路径用英文) 3。建立 自己的初始化函数init.s。初始化文件一定要用汇编
[单片机]
三星2440 <font color='red'>ARM</font><font color='red'>初始化</font>
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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