有关设置栈指针sp寄存器r13

ARM 架构中的R13栈指针(SP) R13(SP)是ARM架构中专用的栈指针寄存器,管理栈内存操作。核心功能包括:1)采用满递减栈机制,地址向减小方向增长;2)支持PUSH/POP指令实现数据存取;3)不同处理器模式(如用户/中断模式)拥有独立栈指针。使用需注意栈对齐要求(ARMv7需8字节对齐)和初始化规范。作为函数调用、局部变量存储的基础,SP在AAPCS标准中严格规定了调用约定,是ARM汇编编程和嵌入式开发的关键寄存器,直接影响程序的内存管理和异常处理机制。 阅读详情

为什么在调用C程序时,要在汇编(.S)文件中设置栈指针sp(Stack Pointer) r13?还有设置栈指针的时候赋的值是多少时如何确定的。

.text
.global _start

_start:

	/* 设置内存: sp 栈 */
	ldr sp, =4096 /* nand启动 */
//	ldr sp, =0x40000000+4096 /* nor启动 */
	
	/* 调用main */
	bl main

halt:
	b halt


为什么要nand启动设置成4096,nor启动设置为0x40000000+4096?


1.SDRAM的地址是 0x30000000 - 0x40000000。

2.Nand启动时,片内4K RAM基地址为0(在0地址处),Nor Flash不可访问。

3.Nor启动时,片内RAM地址为0x4000 0000,片内RAM在0x4000 0000往后的4k 此时的栈顶可以设置到内存的上限 0x40000000 + 4k(4096)。

4. 调用C函数时,返回地址、局部变量一般都保存在栈里,所以调用C程序时要设置栈指针
5. 之所以设成4096,是由于S4C2410、S3C2440从NAND Flash启动时,它的内部4K RAM的地址为0~4095,可以把栈指针指向最后──其实你也可以指向0~4095中间某个位置,只要不破坏要运行的代码就可以

Pentaho安装与配置 Pentaho安装与配置前言一、下载二、配置1.JDK环境2.添加mysql-jdbc驱动三、启动 前言 Pentaho Data Integration (PDI):前身是Kettle。Pentaho提供了提取、转换和加载(ETL)功能,该功能使用统一且与最终用户和物联网技术相关且可访问的格式简化了捕获、清理和存储数据的过程。 功能:提供报表的制作、分析、仪表板、数据集成、数据采集、商业智能平台等强大功能。 一、下载 官网地址:http://www.pentaho.com/ 不过已经访问不到了 阅读详情

相关推荐

机器学习: 共轭梯度算法(PCG)

今天介绍数值计算和优化方法中非常有效的一种数值解法,共轭梯度法。我们知道,在解大型线性方程组的时候,很少会有一步到位的精确解析解,一般都需要通过迭代来进行逼近,而 PCG 就是这样一种迭代逼近算法。 我们先从一种特殊的线性方程组的定义开始,比如我们需要解如下的线性方程组: Ax=bAx=b 这里的 A(n×n)A(n×n) 是对称,正定矩阵, b(n×...

weixin_30807677的博客 3181

C语言版——点亮LED灯,深入到栈

在上一篇进行了汇编语言的编写之后,我们采用C语言来编写程序,毕竟C语言才是我们使用最多的语言。 仅仅是点亮LED灯显然太过于简单,我们需要分析最后的反汇编,了解函数调用栈,深入C语言骨髓去分析代码,并且自己编写C语言的库函数版本,方便以后开发,同时也是对自己C语言封装能力的锻炼。 先贴韦老大的代码: start.s: .text .global _start _start: /* 设...

weixin_33965305的博客 804

如何在iPhone上本地运行SmolVLM?5亿参数模型实战指南(附Swift代码)

本文详细介绍了如何在iPhone上本地部署和运行轻量高效的SmolVLM多模态模型。通过实战指南,分享了使用Swift和MLX框架进行环境配置、模型加载、内存优化以及实现实时图像分析与文本生成的完整流程,帮助开发者在移动端高效运行AI视觉语言模型。

echo99的专栏 654

linux 心跳灯_嵌入式linux——点亮led灯(二)

刚才在jz2440板子上写了一个点亮中间led的程序,前前后后十几分钟才好。最终代码本节内容:1.汇编点灯2. C点灯3.参数选择点灯4.按键点灯1.汇编点灯.text.global_start_start:/*在这个程序中,完成点亮中间的led灯D11* GPF5 从原理图得知,低电平点亮* GPFCON 0x56000050* GPFDAT 0x56000054*/ldr r0,...

weixin_36433781的博客 773

智能车学习日记【二】————十字和斜入十字

智能车学习日记【二】————十字和斜入十字 文章目录 智能车学习日记【二】————十字和斜入十字 前言 一、普通十字补线 二、斜入十字 1.判断是否为斜入十字和斜入十字类型 2.找斜入十字拐点 总结 前言 经过了一个多月的学习,小白的我终于也是能较稳定调出了2.8m以上的四轮车,过程中也遇到了很多困难,其中就有十字补线和斜入十字补线。尤其是斜入十字也是困扰了我快一周,现在和大家分享一下我处理斜入十字的方法(我的方法其实还有很多漏洞需要改进,仅供大家参考理解一下,欢迎各位在评论区指点出可

bsefef的博客 2740

谷歌学术用publish-or-perish来对引用量排序

用谷歌学术搜索文献的时候发现不能按照引用量高低进行排序,网上提供了这个软件。 下载地址如下:Publish or Perish (harzing.com)https://harzing.com/resources/publish-or-perish 关于软件界面页面和各种指标的介绍,可以参考中科大的这个PPT: 文献分析软件——publish or perish(精品·公开课件).ppt (book118.com)https://max.book118.com/html/2018/1124/813

m0_48878989的博客 1万+

星星点灯(点亮LED灯)

2、再次点灯 显然用汇编写代码比较困难,如何用C语言来点灯呢? 先准备个栈,如何告知ARM栈从哪里开始呢? sp寄存器:这个存储器指定了栈的开始地址,这样就好办了!!!不过栈从哪里开始呢?还记得处理器有个内部SRAM,它的大小有4k,也就是4096byte。那我们就设置栈从4096开始往下增长吧。 如果ldr sp,=4096,那就代表是从nand启动 ldr sp,=0x4000...

Jiaying888168的博客 327

Github多人协作

最近有门课程需要几个人一起开发一个项目,此前我们基本都是单干的,多人合作意味着需要及时将我们每个人的代码进行合并,U盘传文件这种方式太慢了,效率不行,而且没法解决两个人同时修改一个文件的问题,这次我们就尝试使用Github来协助开发。下面就来记录一下这次开发遇到的一些问题和解决的方法。 Git的安装 从官网下载最新版按照默认安装即可。 此处不多加说明。 Git常用命令 在此放上一...

yzr1216的博客 1万+

STM32 bootloader制作

flash一个扇区为1KB,在实例中使用4KB,实际情况依据bootloader代码大小调整。记得勾选user memory frome target dialog选项。那么app程序大小可使用空间为0x08000000-0x0800FFFF。那么app程序大小可使用空间为0x08001000-0x08010000。MCU的flash起始地址为0x08000000。设置bootloader程序大小为0x1000。在FLASH地址的第一个地址记录着栈顶位置。第二个地址记录着Reset 函数的地址。

zj55822的博客 1534

C#上位机实战:手把手搭智慧工业数字孪生系统,从设备建模到实时联动全落地

字段长度(字节)说明起始标识2固定为0xAA55,用于判断数据包开始设备ID4唯一标识设备(比如1001代表电机1)数据类型10=布尔(启停),1=浮点数(转速/温度)数据长度4数据字节数(布尔1字节,浮点数4字节)数据内容N实际数据(按数据长度读取)校验位1前面所有字节的异或校验,防止数据篡改结束标识2固定为0x55AA,用于判断数据包结束。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 968

YOLOv12涨点改进 | 全网独家首发Conv改进篇 | Arxiv 2025 | 引入一种新的WConv加权卷积改进YOLOv12,显著提升其特征提取能力和目标检测精度

本文提出了一种新型加权卷积(WConv)模块,通过引入最优密度函数动态调整邻域像素权重,显著提升了YOLOv12目标检测性能。WConv在保持参数数量不变的情况下,提高了模型精度(VGG准确率提升10%)、增强了小目标检测能力,并改善了多尺度特征提取。文中详细介绍了模块原理、网络结构改进方法,并提供了核心代码实现和yaml配置文件。实验表明,该方法在图像任务中最高可降低53%的损失,虽然会带来11%的时间开销,但具有优异的鲁棒性。该技术可广泛应用于2D/3D图像处理领域。

Ai缝合怪、助力小伙伴高效发论文 216

STM32——最好的指针详解

同级指针才能赋值,比如说chara = 0x66;char *p;那p=a就不成立,你可以这样理解,变量a是零级指针,p是一级指针,再往后还有二级、三级指针,不同级指针不能赋值。但是p=&a就成立,因为&之后,就是地址了,地址就是指针。

hgfjv的博客 4574

[CSP-X2025山东小学组T4]勇者斗恶龙

[CSP-X2025山东小学组T4]勇者斗恶龙,动态规划

少儿编程乔老师 150

18.9 有关设置栈指针sp寄存器r13

为什么在调用C程序时,要在汇编(.S)文件中设置栈指针sp(Stack Pointer) r13?设置栈指针的时候赋的值是多少,如何确定? 01 .text 02 .global _start 04 _start: 05 06 /*设置内存: sp栈*/ 07 ldr sp, =4096 /* nand启动 */ 08 // ldr sp, =0x40000...

weixin_30654583的博客 609

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

TI dsp C/C++ System Stack

以下内容摘自TI DSP specification. The C/C++ compiler uses a stack to: Allocate local variables Pass arguments to functions Save register contents The run-time stack grows from the high ad

dinkysummydinky的专栏 704

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

堆栈指针寄存器 SP详解以及栈的作用

本文引用地址:http://www.eepw.com.cn/article/201611/321963.htm 韦东山:https://blog.youkuaiyun.com/thisway_diy/article/details/76422943 堆栈是一种具有“后进先出”(LIFO---Last In First Out)特殊访问属性的存储结构。堆 栈一般使用RAM 物理资源作为存储体,再加上LI...

蓝色鲜橙多的博客 3万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

堆栈指针寄存器-SP详解

基本概念: 堆栈指针寄存器-SP是什么? 答:堆栈是计算机存储数据的一种数据结构,SP的作用就是指示当前要出栈或入栈的数据,并在操作执行后自动递增或递减。 至于是入栈递增还是入栈递减,就是由CPU的生产厂家确定,通常由一块存储区和指向该存储区的指针SP构成。  1. 在堆栈中保存数据叫入栈/压栈,从堆栈中读取数据叫出栈。 2.堆栈是一种具有“先进后出,后进先出”(LIFO--...

zcshh的博客 3万+

ARM指针寄存器——堆栈指针寄存器SP、程序计数器PC、连接寄存器LR

在随机存储器区划出一块区域作为堆栈区,数据可以一个个顺序地存入(压入)到这个区域之中,这个过程称为‘压栈’(push )。通常用一个指针(堆栈指针 SP—StackPointer)实现做一次调整,SP总指向最后一个压入堆栈的数据所在的数据单元(栈顶)。从堆栈中读取数据时,按照堆栈 指针指向的堆栈单元读取堆栈数据,这个过程叫做 ‘弹出’(pop ),每弹出一个数据,SP 即向相反方向做一次调整,如此就实现了后进先出的原则。 堆栈是计算机中广泛应用的技术,基于堆栈具有的数据进出LIFO特性,常应用于保存中断断

zhuguanlin121的博客 1万+

ARM三个寄存器 : 堆栈指针SP(R13)、连接寄存器LR(R14)和程序计数器PC(R15)

深入理解ARM的这三个寄存器,对编程以及操作系统的移植都是必要的。 1、堆栈指针R13(SP):每一种异常模式都有其自己独立的r13,它通常指向异常模式所专用的堆栈,也就是说五种异常模式、非异常模式(用户模式和系统模式),都有各自独立的堆栈,用不同的堆栈指针来索引。这样当ARM进入异常模式的时候,程序就可以把一般通用寄存器压入堆栈,返回时再出栈,保证了各种模式下程序的状态的完整性。 2、...

uunubt的专栏 8601

3.堆栈指针寄存器 SP 详解

堆栈指针寄存器SP详解 堆栈是一种具有“后进先出”(LIFO---Last In First Out)特殊访问属性的存储结构。堆栈一般使用RAM 物理资源作为存储体,再加上LIFO 访问接口实现。 堆栈的实现方法: 在随机存储器区划出一块区域作为堆栈区,数据可以一个个顺序地存入(压入)到这个区域之中,这个过程...

huaxiaolunan的博客 7169

ARM指针寄存器——堆栈指针寄存器SP、程序计数器PC、连接寄存器LR(1)

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!” />你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!更多资料点击此处获qu!!

disrm84160的博客 2196

ARM寄存器(R13/R14/R15)

一、ARM工作状态下的寄存器组织 ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个位状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决ARM处理器的工作状态及具体的运行模式。但在任何时候,通用寄存器R14~R0、程序计数器PC(即R15)、一个状态寄存器都是可访问的。 通用寄存器 通用寄存器包括R0~R15,可以分为3类: (1)未分组寄存

若海人生的专栏 3万+

堆栈指针的介绍

话说回来,计算机内部肯定选第一种模型,不会选第二种,因为第二种模型,每压入一个新的元素,都需要把之前堆栈里的所有元素整体下移动一个元素的位置,腾出栈顶元素的位置让新的元素进来,这种平移可是一笔不小的开销啊!因为你的栈底是无限的,你压入一个元素,新的元素就取代先前的栈顶元素占据栈顶的位置,那么你先前的指向栈顶元素的指针这个时候就该修改让它指向这个新的栈顶元素了。”,因为你堆栈指针指向的总是栈顶元素,栈底不能动,所以数据入栈前要先修改指针使它指向新的空余空间然后再把数据存进去,出栈的时候自然相反。

让学习成为一种习惯 5594

栈寄存器R0-R15

寄存器r0-r15含义 注意:R11=fp;R12=ip;R13=SP;R14=LR;R15=PC;R0,R1,R2用于传递参数和存放函数返回值。 注意:低地址的寄存器被压入低地址内存中,也就是说如果向下增长,高地址寄存器先压,向上增长测试低地址先压。 注意:根据“ARM-thumb 过程调用标准”: 1, r0-r3 用作传入函数参数,传出函数返回值。在子程序调用之间,可以将 r0-r3 用于任何用途。被调用函数在返回之前不必恢复 r0-r3。---如果调用函数需要再次使用 r0-r3 的内..

超级张大侠的博客 6348

【嵌入式】---- ARM寄存器_SP,LR,PC,特殊寄存器

寄存器组 CM3拥有通用寄存器组R0~R15和一些特殊寄存器 R13:SP堆栈指针寄存器 功能:指向堆栈的栈顶 详解: 1)异常模式发生时,程序把通用寄存器压入堆,SP一直指向栈顶的位置。返回时再出栈,保证程序状态的完整性。 2)有MSP 和PSP(两者只需一个,不能同时使用,默认MSP)。 MSP :主堆栈指针,系统用。PSP : 进程堆栈指针,个人堆栈指针。 R14:LR连接寄存器 功能:保...

wyifan_的博客 4563
上一篇: (P)为什么重nor中读取4个字节时要访问nor两次?
下一篇: 2440里面有个看门狗 定时器(Watch Dog Timer)
mainn
博客等级 码龄10年 865粉丝 447原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值