基于DSP2407的对帧指针(FP)、栈指针(SP)的分析

【操作系统】堆栈寄存器sp详解以及栈帧 在x86架构中,函数调用的栈帧(Stack Frame)是函数调用过程中用于保存函数局部变量、返回地址、参数等的一块内存空间。堆栈寄存器是现代处理器的重要组成部分,在嵌入式开发之中,要对此区域的使用十分敏感,因为堆栈寄存器是处理器的重要组成部分,其高效管理对程序运行的稳定性和安全性起着关键作用。, SP)是处理器中一个专门用于管理栈(Stack)的寄存器,它保存了当前栈的顶部地址。接下来,为了进一步的理解堆栈中发生的事,我们使用x86汇编语言说明函数调用栈帧的创建和销毁的过程详情。 阅读详情

    本文通过分析一个简单函数的保护现场和恢复现场,来理解FP和SP指针。

    DSP中有几个指针是有特殊用途的,AR0为FP指针,AR1为SP指针,AR2、AR3、AR4和AR5可以自由使用,也就是说,在函数执行过程中可以修改,也不必恢复。AR6和AR7用作寄存器变量。如果在函数中被修改,必须加以保护和恢复。

 

  1.     int add(int a, int b, int c)
  2.     {
  3.         int nSum = 0;
  4.         nSum = a + b + c;
  5.         return nSum;
  6.     }
  7.     汇编代码如下:
  8.     add:                                    ;进入函数ARP为1
  9.     POPD    *+                       ;保存函数返回地址
  10.     SAR     AR0, *+                ;保存FP指针
  11.     SAR     AR1, *                  ;保存SP指针
  12.     LAR     AR0,#2h               ;加载局部帧长度,即局部变量的个数+1
  13.     LAR     AR0,*0+,AR2      ;旧FP = 旧SP,新SP = 旧SP + 2,ARP = 2
  14.     LACL    #0h
  15.     LAR     AR2,#1h               ;AR2 = 1
  16.     MAR     *0+                      ;AR2 = AR2 + AR0
  17.     SACL    *,0                        ;AR2内容置0
  18.     SETC    SXM
  19.     SBRK    #4h                      ;AR2 = AR2 - 4
  20.                                               ;内存排列入下:
  21.                                               ;参数C,返回地址,旧FP,旧SP,AR2.这时AR2指向参数C
  22.     LACC    *-,0                     ;加载c,AR2 = AR2 - 1
  23.     ADD     *-,0                      ;ACC += b, AR2 = AR2 - 1
  24.     ADD     *,0                       ;ACC += a
  25.     ADRK    #6h                    ;内存排列入下:
  26.                                               ;参数A(AR2),B,C,返回地址,旧FP,旧SP, (计算之前)。
  27.                                               ;AR2 += 6,返回到AR2开始计算之前的地址
  28.     SACL    *,0                       ;赋值给nSum 
  29.     LACC    *,0                      ;加载到ACC,做返回值
  30.     MAR     *,AR1                 ;切换到AR1
  31.     SBRK    #3h                      ;撤消局部帧,AR1回到旧FP的位置
  32.     LAR     AR0,*-                 ;恢复FP
  33.     PSHD    *                          ;返回地址压栈
  34.     RET
DSP2407开发板RAM测试电路方案设计 本文还有配套的精品资源,点击获取 简介:本项目涉及使用TI公司的TMS320F2407数字信号处理器开发板进行RAM测试的硬件设计方案,包含原理图、PCB设计、源代码和完整工程文件。设计重点包括RAM与DSP2407的接口设计、RAM初始化、内存测试算法实施、错误检测机制、PCB设计的信号完整性及电磁兼容性考虑、电路原理图的展示,以及源代码的提供。学习者可以通过这些资源全面... 阅读详情

相关推荐

基于DSP2407实现SCI232串口通信的完整电路设计方案

DSP2407开发板是基于TI公司TMS320LF2407 DSP芯片设计的嵌入式控制平台,广泛应用于电机控制、工业自动化与通信系统等领域。其强大的实时处理能力、丰富的外设接口以及灵活的可编程性,使其成为嵌入式通信系统开发的理想选择。SCI232通信系统基于RS-232标准,是实现DSP与PC或其他外围设备之间串行通信的关键模块。该系统通过异步串行通信协议实现数据的点对点传输,具备结构简单、成本低、兼容性强等优点。

weixin_28746457的博客 504

物奇5007crash问题dump、栈回溯的四种定位方法

物奇属于RISC-V架构(chapter1_riscv.md · 华中科技大学操作系统团队/pke-doc - Gitee.com),在遇到crash问题时,系统内部会对内存进行相关的保护和检测,当发现异常时会主动调用 IOT_ASSERT,通常会产生相关的 log 文件, 如: ***.c:xxx Asserted!出现异常时的现场 dump 记录,将通用的 32 个 CPU 寄存器 dump 输出。回栈信息记录。出现异常时的堆栈信息以及调用函数地址。

里昂的博客 995

深入掌握DSP2407定时器编程与应用

数字信号处理器(DSP)是专门为了实现数字信号处理算法而优化设计的微处理器。TMS320C2407是德州仪器(Texas Instruments)推出的一款高性能、固定点的DSP处理器,它在工业自动化、通信等领域中扮演着至关重要的角色。本章将详细介绍TMS320C2407的基本特点、架构以及它在数字信号处理中的应用。在TMS320C2407中,中断系统非常灵活,定时器中断可以与CPU中断系统灵活对接。定时器中断可以设置为优先级,甚至可以被屏蔽。

weixin_31860973的博客 879

DSP TMS320C28x CPU 和指令设置参考【CPU】

一、CPU结构 二、CPU寄存器 1、累加器 Accumulator (ACC, AH, AL) 2、乘数寄存器 Multiplicand Register (XT) 3、乘积寄存器Product Register (P, PH, PL) 4、数据页指针寄存器Data Page Pointer (DP) 在直接寻址模式,数据存储器以 64 个字的块(称为数据页)进行寻址,每 64 个字构成一个数据页,数据存储器的低 4M 字包含 65536 个数据页,标记为 0 至 65535。 数据...

老干妈拌雪梨喂张学友的博客 7806

TMS320LF2407A DSP中断管理系统实战

TMS320LF2407A是由德州仪器(Texas Instruments)生产的一款高性能16位定点数字信号处理器(DSP),属于C2000系列。它具有强大的计算能力,特别适合于实时控制应用,广泛应用于工业控制、电机驱动和数字电源等领域。通过以上方法,我们可以有效地缩短DSP中断的响应时间。选择合适的方法取决于具体的应用需求和硬件平台。硬件加速通常需要额外的硬件支持,而软件优化则更加灵活。通过综合使用多种调试工具和技巧,开发者可以更加深入地理解中断系统的运行机制,有效定位和解决问题。

weixin_42388898的博客 1004

TMS320LF2407 DSP最小系统原理图

TMS320LF2407 DSP最小系统原理图

ARM寄存器与x86寄存器介绍

文章目录简单介绍一下指令集:复杂指令集最著名的应该是intel的X86指令集精简指令集最著名的应该是ARM架构在这之前先进行cpu介绍以及cpu运行机制(简单介绍)cpu组成部分:电脑运行机制(基本)按照寄存器种类进行简单分类X86寄存器简单介绍4个数据寄存器(eax、ebx、ecx和edx)这4个还有其他的名称(作专门相关与数据的事情,以提高运算效率 专能专用)4个指针的指针寄存器(ebp,esp,ebp和esp)(还是可以进行计算)其他寄存器暂时不考虑ARM寄存器简单介绍 简单介绍一下指令集: 分

asibble的博客 4515

GD32F303串口DMA发送数据避坑指南:为什么你的发送函数会卡住?

本文深入解析GD32F303单片机串口DMA发送数据时常见的卡死问题,提供详细的避坑指南。从DMA传输完成中断时序、发送状态管理到双通道DMA的特别注意事项,全面剖析问题根源并给出解决方案,帮助开发者构建健壮的DMA发送机制。

weixin_27038245的博客 295

DSP学习笔记(三)——TMS320F28335硬件结构

第二章 TMS320F28335 硬件结构 1 TMS320F28335 硬件概述 Tms320f28335主要有8个部分组成,由32位的cpu内核、集成内存、总线、DMA、DMA总线、中断管理、控制率加速器、外设总线、外设等部分。 总线为哈佛结构,cpu可在一个时钟周期完成对数据存储器与程序存储器的访问。 DMA总线,可以使特定模块直接与内存交换数据,不过cpu。 2 cpu架构 2...

wasser000的博客 3万+

从原理到调试:一次搞懂Camera Sensor的曝光、增益与帧率三角关系

本文深入解析Camera Sensor中曝光、增益与帧率之间的动态平衡关系,揭示低光环境下帧率下降的根本原因。通过实际调试案例和底层公式分析,帮助开发者理解如何优化相机参数设置,实现画质与流畅度的最佳平衡。

weixin_31310913的博客 432

tiny4412用 usb 连接计算机显示sec s5pc210 test b/d 解决方法

当我用USB线连接tiny4412的microUSB端口的时候,出现了驱动没有正常安装,显示“sec s5pc210 test b/d” 出现这种问题的原因有: 1、没有安装到正确的USB驱动; 2、SD卡没有插好 我出现问题的原因属于第二种,插入SD卡后,上电后,LCD屏亮了,但没有任何显示   解决方法是:     更换一张SD卡,重新插入开发板卡槽,上电开

karaskass的博客 3232

为什么要使用堆栈? sp和fp的解释

 为什么要使用堆栈?     一个过程调用可以象跳转(jump)命令那样改变程序的控制流程, 但是与跳转不同的是, 当工作完成时,函数把控制权返回给调用之后的语句或指令。 这种高级抽象实现起来要靠堆栈的帮助。     堆栈也用于给函数中使用的局部变量动态分配空间, 同样给函数传递参数和函数返回值也要用到堆栈。 堆栈区详解     堆栈是一块保存数据的连续内存。 一个名为

~ 飞 扬 的 天 空 ~ 2万+

从零搭建AMESim与Matlab/Simulink联合仿真环境(2024版软件配置详解)

本文详细介绍了2024年最新版AMESim与Matlab/Simulink联合仿真环境的搭建与配置方法。从软件安装顺序、路径设置到编译器配置,逐步指导如何实现高效联合仿真,特别强调了版本兼容性和环境变量设置等关键细节,帮助工程师快速解决常见问题并优化仿真性能。

weixin_42538752的博客 740

[crash分析1]C语言在ARM中函数调用时,栈是如何变化的?

可以看到,上述所说的流程没有遵循ATPCS规范,根据反汇编的代码看到也没有遵循ATPCS规则的寄存器使用规则。1.在这里函数的传参一律使用栈传参,因此不涉及寄存器的保存。2.callee的返回地址没有使用LR寄存器,而是使用caller的栈保存子函数返回地址。3.FP寄存器在这里叫栈底寄存器,用来标识当前函数的栈底。每次进入一个子函数时,子函数一开始FP和SP相同,SP随着该子函数的栈变化而变化。

heshuangzong的博客 893

Contest 226 - C - Martial artist

from atcoder Problem Statement Time Limit: 2 sec / Memory Limit: 1024 MB Score :300300points Takahashi is a martial artist. There areNNmoves that a martial artist can learn, called Move11,22,\ldots…,NN. For each1 \leq i \leq N1≤i≤N, it takes...

m0_54674275的博客 1020

具身智能:原理、算法与系统 第1章 具身智能的本质与范畴

从学术定义的角度,具身智能可被界定为"与物理环境进行有目的的能量与信息交换"的智能形式。这一定义揭示了具身智能的两个本质维度:信息处理维度与能量交互维度。与传统人工智能系统仅在信息空间操作不同,具身智能系统必须同时处理信息流与能量流,在物理约束下实现感知、认知与行动的统一。具身智能体具有三个核心构成要素:物理身体(Physical Body)、感知系统(Sensory System)与效应器(Effectors)。这三者共同构成了感知与行动的基础,使智能体能够通过物理交互而非纯粹符号操作来理解世界。

VectorShift的博客 271

DM642 DSP内存管理的一点经验

可恶的DSP又吞没了我的假期。先整理个经验,碰到类似问题可以获得些启发的:俺的程序是QC_LDPC,传说中最占内存的信道编码,所以程序和内存的矛盾是这个程序的主要矛盾。1. 本想在一个函数里建立一个很大的数组,函数运行完会自动删掉,但那是没法做到的,这个大数组

refine19的专栏 1349

让 PyCharm 代码“发光”:高亮插件与特效全攻略

PyCharm 作为一款强大的 Python IDE,支持多种插件让代码“发光”——无论是动态输入特效、彩虹括号,还是霓虹主题,都能让你的代码脱颖而出!进入 File → Settings → Editor → Color Scheme → Rainbow Brackets。进入 File → Settings → Appearance & Behavior → Material Theme。进入 File → Settings → Editor → Color Scheme → General。

qq_43580271的博客 3838

SP 指针

SP “栈指针”(Stack Pointer)

m0_69457995的博客 1606

Unity 面试篇|(三)设计模式篇 【全面总结 | 持续更新 | 建议收藏】

设计模式是一套被反复使用、多数人知晓、经过分类编目、代码设计经验的总结。设计模式与方法或库的使用方式不同, 你很难直接在自己的程序中套用某个设计模式。模式并不是一段特定的代码, 而是解决特定问题的一般性概念。你可以根据模式来实现符合自己程序实际所需的解决方案。常常会混淆模式和算法, 因为两者在概念上都是已知特定问题的典型解决方案。但算法总是明确定义达成特定目标所需的一系列步骤, 而模式则是对解决方案的更高层次描述。同一模式在两个不同程序中的实现代码可能会不一样。单例模式。

游戏开发小Y的博客 12万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

DSP F28335中断系统

一、中断概念 1.中断介绍 1.1 中断概念 中断其实就是当 CPU 执行程序时,由于发生了某种随机的事件(外部或内部),引起 CPU 暂时中断正在运行的程序,转去执行一段特殊的服务程序(中断服务子程序或中断处理程序),以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程就称为中断,引发中断的称为中断源。 1.2 F28335中断概述 F28335内部有16个中断线,其中包括2个不可屏蔽中断(RESET和NMI)与14个可屏蔽中断。 (GPIO0...

u012616827的博客 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

DSP 28335 的中断系统总结

28335 的中断系统总结" title="DSP 28335 的中断系统总结" style="margin:0px; padding:0px; border:0px; list-style:none"> 28335 的中断系统总结" title="DSP 28335 的中断系统总结" style="margin:0px; padding:0px; border:0px; list-styl

娜娜的博客 7271

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C代码优化方案[z]

From:http://blog.163.com/alan3902@126/blog/static/8858207200842632053240/   1、选择合适的算法和数据结构 选择一种合适的数据结构很重要,如果在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多。数组与指针语句具有十分密切的关系,一般来说,指针比较灵活简洁,而数组则比较直观,容易理解。对于大部分的编译器,使用...

liudaoru - 悟 230

DSP28335中spi的配置------mcbsp配置&自带的spi配置

之前写过一个dsp驱动w5200以太网的驱动,分别用到如题的两种方式 下面简单介绍下配置要点和收发等情况; spi的引脚控制主要用到 SPISOMI: 主入从出 SPISIMO:主出从入 SPICLK:时钟 第一种方式:mcbsp配置成spi —————————————————–mcbsp—————————————————————————————- void LAN1_Gpio(...

僧哥叨叨叨 1万+

TMS320C28x的中断

中断架构总览 说明: 总共有16路中断送入CPU。其中INT1~INT12的来源是ePIE,INT13和INT14是TIMER1和TIMER2.另外还有NMI和RTOSINT TIMER0中断与TIMER1和TIMER2不同,它不是直接送给CPU,而是先送到ePIE。 外部输入中断:从GPIO口经过Input X-BAR的选择后送给XINT1~XINT5,再送到ePIE 其他外设的中断都是先经过ePIE。 中断传播路径 说明: 外设中断先到达外设中断标志寄存器中锁存:PIE...

booksyhay的专栏 4362
上一篇: OnPaint和OnDraw的区别
下一篇: 用VHDL设置引脚刚上电的状态
tracing
博客等级 码龄20年 108粉丝 52原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值