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

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

3天内不再提示

与你一起揭开LR寄存器的神秘面纱

UtFs_Zlgmcu7890 来源:互联网 作者:佚名 2017-10-31 06:35 次阅读

不知你在DEBUG程序,又或者阅读操作系统源码时候有没细心观察,从一个普通子函数返回与异常(中断)返回的汇编指令都是BX LR,但是这两者的意义是一样的吗?这篇文章就来揭开LR寄存器的神秘面纱。

单片机涉及函数跳转或者任务调度的时候,理解MCU如何处理堆栈与改变各个通用寄存器的状态尤为重要,下面就来比较一下在不同情况下LR寄存器的意义。

上图是一个简单的例子,当仿真点击“下一步”的时候,MCU就会执行BX LR指令,并且从aa子函数返回到main函数中,可以看到在普通子函数里执行BX LR的意义是“跳转到LR寄存器里的地址执行”。

对比一下一段ucos的源码,如果对M3内核有所了解的小伙伴一定知道堆栈为什么是这样定义的,那么这时候我们发现OS_TaskReturn是作为一个错误返回函数,并且赋值到堆栈中R14(LR)相应的位置。

任务调度函数会将PSP堆栈指针指向我们定义自定义的堆栈,然后最后一句汇编是BX LR,那么按照普通子函数执行BX LR的意义,这个时候MCU是会运行OS_TaskReturn这个函数吗?这样不就进入错误函数了吗?

其实不然,因为用M系列实现ucos的任务调度是在PendSV异常(中断)里面实现的,而在异常(中断)里的LR寄存器不再是普通函数里面“返回地址”的意义,而是一个定义为一个称作exc-return的值,当执行BX LR时候,这个值决定了MCU退出异常(中断)之后的运行等级是在特权级还是用户级以及用的堆栈是MSP还是PSP,而MCU即将要执行的是从PSP堆栈中POP出来的p_task函数,而不是OS_TaskReturn函数。

是不是觉得很有趣,蠢蠢欲动,迫不及待想上手体验一下呢?考虑到广大群众的焦虑,我司提供 LPC824仿真套餐服务,不用998,也不用99,只要49,你还在想什么呢?赶紧复制下面的淘口令打开淘宝上车吧

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

    关注

    31

    文章

    5334

    浏览量

    120208
  • 汇编指令
    +关注

    关注

    0

    文章

    38

    浏览量

    11447
  • LPC824
    +关注

    关注

    0

    文章

    8

    浏览量

    5272
收藏 人收藏

    评论

    相关推荐

    解读版|Air780E软件中C语言内存数组的神秘面纱

    今天我们来揭开Air780E 软件中 C 语言内存数组的神秘面纱,希望有所收获。
    的头像 发表于 11-17 10:00 219次阅读
    解读版|Air780E软件中C语言内存数组的<b class='flag-5'>神秘</b><b class='flag-5'>面纱</b>!

    用智能DAC揭开医疗报警设计的神秘面纱

    电子发烧友网站提供《用智能DAC揭开医疗报警设计的神秘面纱.pdf》资料免费下载
    发表于 09-14 10:50 0次下载
    用智能DAC<b class='flag-5'>揭开</b>医疗报警设计的<b class='flag-5'>神秘</b><b class='flag-5'>面纱</b>

    寄存器的类型和作用

    在计算机科学中,寄存器(Register)是种高速存储单元,它位于CPU内部,与CPU的运算单元和逻辑控制单元紧密相连。寄存器的主要作用是暂时存储指令、操作数和地址等临时数据,以便CPU快速访问和处理。由于
    的头像 发表于 09-05 14:11 1535次阅读

    寄存器是什么意思?寄存器是如何构成的?

    在计算机科学中,寄存器(Register)是个高速存储单元,它位于中央处理(CPU)内部,用于存储计算机程序执行过程中所需要的数据、指令地址或状态信息。寄存器是计算机体系结构中至关
    的头像 发表于 08-02 18:23 3846次阅读
    <b class='flag-5'>寄存器</b>是什么意思?<b class='flag-5'>寄存器</b>是如何构成的?

    北斗卫星时钟——揭开“授时”的神秘面纱

    ,这些时间信息又是从哪里来的呢?为什么我们可以随时随地都能获取准确的时间信息?这得益于高精度的 授时服务 ,今天我们就来揭开“授时”的神秘面纱。      大家都知道我国的北斗导航卫星,是用于定位导航的。那么北斗是怎么进行定位导
    的头像 发表于 07-25 16:21 396次阅读
    北斗卫星时钟——<b class='flag-5'>揭开</b>“授时”的<b class='flag-5'>神秘</b><b class='flag-5'>面纱</b>

    寄存器寻址和直接寻址的区别

    寄存器寻址 寄存器寻址的定义 寄存器寻址是种将操作数直接存储在CPU内部寄存器中的寻址
    的头像 发表于 07-12 10:42 1624次阅读

    寄存器寻址的实现方式

    在计算机体系结构中,寄存器寻址是种常见的寻址方式,它允许程序直接访问CPU内部的寄存器寄存器寻址可以提高程序的执行效率,因为它避免了对内存的访问。
    的头像 发表于 07-12 10:36 627次阅读

    寄存器分为基本寄存器和什么两种

    寄存器是计算机中用于存储数据的高速存储单元,它们是CPU内部的重要组成部分。寄存器可以分为基本寄存器和扩展寄存器两种类型。 、基本
    的头像 发表于 07-12 10:31 1282次阅读

    xAI公司将在八月揭开其新Grok-2大语言模型的神秘面纱

    在科技界的浩瀚星空中,埃隆·马斯克的每次发声都如同璀璨的新星,瞬间照亮前行的道路。近日,这位科技巨擘在推特上的则简短宣告,再次将全球的目光聚焦于人工智能的前沿阵地——他的初创公司xAI即将在八月揭开其最新力作Grok-2大语
    的头像 发表于 07-02 11:38 487次阅读

    揭开Pluto XZU20的神秘面纱—探寻未来紧凑而强大的FPGA解决方案

    创新成果具有挽救生命、改变生活和创造梦想的能力。现在让我们一起紧随Pluto产品发布会的步伐,揭开PlutoXZU20的神秘面纱,与我们一起
    的头像 发表于 06-21 08:09 364次阅读
    <b class='flag-5'>揭开</b>Pluto XZU20的<b class='flag-5'>神秘</b><b class='flag-5'>面纱</b>—探寻未来紧凑而强大的FPGA解决方案

    干货满满:ARM的内核寄存器讲解

    内核寄存器与外设寄存器: 内核寄存器与外设寄存器是完全不同的概念。内核寄存器是指 CPU 内部的寄存器
    发表于 04-17 11:47 3488次阅读
    干货满满:ARM的内核<b class='flag-5'>寄存器</b>讲解

    揭开快充芯片的神秘面纱

    UFP芯片是种用于USB快充技术的关键元件,它在移动设备和充电器之间进行通信和协调,以实现高效、安全、快速的充电过程。下面我们将揭开快充芯片的神秘面纱,深入探讨UFP快充芯片的工作原
    的头像 发表于 04-15 12:51 604次阅读

    如何根据自己设计中的寄存器配置总线定义来生成寄存器配置模版

    无论是FPGA还是ASIC,系统设计中总会存在配置寄存器总线的使用,我们会将各种功能、调试寄存器挂载在寄存器总线上使用。
    的头像 发表于 03-04 13:56 1129次阅读
    如何根据自己设计中的<b class='flag-5'>寄存器</b>配置总线定义来生成<b class='flag-5'>一</b>套<b class='flag-5'>寄存器</b>配置模版

    CPU的6个主要寄存器

    CPU寄存器是中央处理内的组成部分,是有限存贮容量的高速存贮部件。寄存器是CPU内部的元件,包括通用寄存器、专用寄存器和控制
    的头像 发表于 02-03 15:15 4198次阅读

    移位寄存器的工作原理 移位寄存器左移和右移怎么算

    移位寄存器种用于在数字电路中实现数据移位操作的基本电路元件。它由多个触发以及相关控制电路组成,具有存储、接受和移动数据的功能。移位寄存器可以分为两种类型:串行移位
    的头像 发表于 01-18 10:52 8152次阅读