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

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

3天内不再提示

一文看懂LR寄存器的知识

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

不知你在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函数。

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

原文标题:神秘的LR寄存器

文章出处:【微信号:Zlgmcu7890,微信公众号:周立功单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    ARM开发中几个常见的寄存器详解

    笔者今天来聊聊对于ARM几个特殊寄存器的理解,FP、SP和LR
    发表于 11-22 09:02 3058次阅读

    lr寄存器

    连接寄存器(Link Register, LR),在ARM体系结构中LR的特殊用途有两种:是用来保存子程序返回地址;二是当异常发生时,LR
    发表于 01-27 14:21

    寄存器组CM3拥有通用寄存器组和些特殊寄存器

    程序状态的完整性。2)有MSP 和PSP(两者只需个,不能同时使用,默认MSP)。MSP :主堆栈指针,系统用。PSP : 进程堆栈指针,个人堆栈指针。R14:LR连接寄存器功能:保...
    发表于 12-16 06:44

    读懂ARM AArch64 state的寄存器

    AArch64 state的寄存器寄存器分为寄存器和特殊寄存器,另外
    发表于 05-09 09:37

    swi的功能号是如何来的?它和LR寄存器的值是何关系

    swi的功能号是如何来的?它和LR寄存器的值是何关系?如《ARM微控制基础与实战》程序清单 6.13LDREQ R0,[LR,#-4] ;BICEQ R0,R0,0xff000000
    发表于 11-30 14:32

    swi的功能号是如何来的?它和LR寄存器的值是何关系?

    swi 的功能号是如何来的 它和 LR 寄存器的值是何关系?如《ARM微控制基础与实战》程序清单 6.13LDREQ R0,[LR,#-4] ;BICEQ R0,R0,0xff000
    发表于 03-09 10:59

    寄存器与移位寄存器

    寄存器与移位寄存器 寄存器是用来寄存数码的逻辑部件,所以必须具备接收和寄存数码的功能。任何一种触发器都可以构成
    发表于 03-12 15:19 59次下载

    寄存器,寄存器是什么意思

    寄存器,寄存器是什么意思 寄存器定义  寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用
    发表于 03-08 14:26 2.1w次阅读

    数据寄存器,数据寄存器是什么意思

    数据寄存器,数据寄存器是什么意思 数据寄存器数据寄存器包括累加器AX、基址寄存器BX、计数寄存器
    发表于 03-08 14:38 1.2w次阅读

    32位寄存器,32位寄存器是什么意思

    32位寄存器,32位寄存器是什么意思  从X8086开始学了一年,第一个ASM的程序就是变32换16进制的程序,不过现在叫我从新开始写ASM程
    发表于 03-08 17:26 1.7w次阅读

    寄存器与移位寄存器

    寄存器与移位寄存器:介绍寄存器原理和移位寄存器的原理及实现。
    发表于 05-20 11:47 0次下载

    一文看懂暂存器和寄存器的区别

    本文开始介绍了暂存器的定义和结构组成,其次介绍了暂存器分类与寄存器定义,最后介绍了寄存器的原理。
    发表于 04-11 09:30 1.5w次阅读

    一文看懂8086CPU寄存器的特点和作用

    8086有14个16位寄存器,这14个寄存器按其用途可分为通用寄存器、指令指针、标志寄存器和段寄存器等4类。下面就来看看这四个
    发表于 04-16 11:36 9950次阅读
    一文<b class='flag-5'>看懂</b>8086CPU<b class='flag-5'>寄存器</b>的特点和作用

    工业机器人FANUC数据位置寄存器和位置寄存器的运用小知识分享

    工业机器人FANUC数据位置寄存器和位置寄存器的运用 一、寄存器指令 Registers① 寄存器指令R[i] i=1~200② 位置寄存器
    的头像 发表于 06-22 10:08 3w次阅读
    工业机器人FANUC数据位置<b class='flag-5'>寄存器</b>和位置<b class='flag-5'>寄存器</b>的运用小<b class='flag-5'>知识</b>分享

    深度学习_硬件知识_上拉寄存器与下拉寄存器

    上拉寄存器上拉寄存器是控制对应端口上拉使能的。当对应位为0时,设置对应引脚上拉使能,对应位为1时,禁止对应引脚上拉使能。如果上拉寄存器使能,无论引脚功能寄存器如何设置(输入、输出、数据
    发表于 01-14 14:31 10次下载
    深度学习_硬件<b class='flag-5'>知识</b>_上拉<b class='flag-5'>寄存器</b>与下拉<b class='flag-5'>寄存器</b>