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

    文章

    5619

    浏览量

    130393
  • 汇编指令
    +关注

    关注

    0

    文章

    38

    浏览量

    11847
  • LPC824
    +关注

    关注

    0

    文章

    8

    浏览量

    5455
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    74AHC594:8位移位寄存器的详细解析与应用

    74AHC594:8位移位寄存器的详细解析与应用 在电子设计领域,移位寄存器种常见且重要的数字电路元件,它能够实现数据的串行输入、串行输出或并行输出。今天,我们就来深入了解下SG
    的头像 发表于 03-26 09:10 444次阅读

    74HC595 8位移位寄存器:设计与应用全解析

    74HC595 8位移位寄存器:设计与应用全解析 在电子工程师的工具箱中,移位寄存器个非常实用的组件。今天,我们就来深入了解下SG Micro Corp的74HC595 8位串行
    的头像 发表于 03-16 10:35 351次阅读

    74LV595A:8位移位寄存器的全方位解析

    74LV595A:8位移位寄存器的全方位解析 在电子设计领域,移位寄存器种常用的逻辑元件,能实现数据的串行输入和并行输出。今天我们要深入探讨SGMICRO的74LV595A,款功
    的头像 发表于 03-16 10:35 262次阅读

    深入解析SPI通信:高速全双工,如何连接微控制与万千外设?启明云端乐鑫代理

    是否曾好奇,手机触摸屏如何灵敏响应,温度传感数据如何被读取,或是存储芯片如何快速读写?其背后,往往离不开种高效而常见的通信协议——SPI。本期启明云端一起
    的头像 发表于 01-13 18:03 625次阅读
    深入解析SPI通信:高速全双工,如何连接微控制<b class='flag-5'>器</b>与万千外设?启明云端乐鑫代理

    【NCS随笔】nRF54L15使用UICR寄存器保存数据

    nRF54L15使用UICR寄存器保存数据 本文章主要是讲解如何使用nRF54L15的UICR寄存器保存些基础数据 、UICR寄存器的说
    的头像 发表于 11-27 17:09 1726次阅读

    嵌入式系统必懂的 20 个寄存器

    嵌入式开发看起来很复杂,但很多操作其实都离不开寄存器寄存器就是MCU内部的存储单元,它们控制着处理和外设的行为。熟悉这些寄存器就能更
    的头像 发表于 11-14 10:28 1355次阅读
    嵌入式系统必懂的 20 个<b class='flag-5'>寄存器</b>

    NVMe高速传输之摆脱XDMA设计32:寄存器功能验证与分析2

    寄存器最大值为 64’hFFFFFFFFFFFFFFFF,到达最大值后个时钟周期后翻转回 0, 在随机时刻使用 force 将寄存器赋值临近最大值, 当寄存器达到最大值后, 翻转回到
    的头像 发表于 10-14 17:06 879次阅读
    NVMe高速传输之摆脱XDMA设计32:<b class='flag-5'>寄存器</b>功能验证与分析2

    ‌SN74HCT595 8位移位寄存器技术解析与应用指南

    移位寄存器和存储寄存器提供时钟。移位寄存器具有个直接覆盖清零 (SRCLR) 输入以及用于级联结构的串行 (SER) 输入和串行输出 (QH’)。当输出使能 (OE) 输入置为高电平
    的头像 发表于 09-19 14:31 1203次阅读
    ‌SN74HCT595 8位移位<b class='flag-5'>寄存器</b>技术解析与应用指南

    TPIC6595 8位功率移位寄存器技术文档摘要

    该TPIC6595是款单片、高压、大电流功率的8位移位寄存器,设计用于需要相对较高负载功率的系统。该器件在输出端包含个内置电压钳位,用于电感瞬态保护。功率驱动应用包括继电器、螺线
    的头像 发表于 09-09 11:10 1041次阅读
    TPIC6595 8位功率移位<b class='flag-5'>寄存器</b>技术文档摘要

    ‌TPIC6B595 8位功率移位寄存器技术文档总结

    TPIC6B595器件是款单片、高压、中电流功率8位移位寄存器,设计用于需要相对高负载功率的系统。该器件在输出端包含个内置电压钳位,用于电感瞬态保护。功率驱动应用包括继电器、螺线
    的头像 发表于 09-09 10:16 1161次阅读
    ‌TPIC6B595 8位功率移位<b class='flag-5'>寄存器</b>技术文档总结

    电源里的“特种部队”:揭秘115V/400Hz高频电力的神秘面纱与应用领域

    ”,虽然小众,却肩负着至关重要的使命。今天,就让我们一起揭开它的神秘面纱、为什么是400Hz?高频电力的优势何在?与常见的50/6
    的头像 发表于 08-29 10:48 1267次阅读
    电源里的“特种部队”:揭秘115V/400Hz高频电力的<b class='flag-5'>神秘</b><b class='flag-5'>面纱</b>与应用领域

    光模块拉环颜色背后的神秘意义,知道多少?

    在数据中心的复杂网络世界里,光模块扮演着至关重要的角色,它负责实现电信号与光信号之间的高效转换,确保数据在光纤网络中稳定、高速地传输。而光模块上小小的拉环颜色,看似不起眼,却隐藏着诸多关键信息,下面跟着小易,一起揭开神秘
    的头像 发表于 08-05 16:22 1402次阅读
    光模块拉环颜色背后的<b class='flag-5'>神秘</b>意义,<b class='flag-5'>你</b>知道多少?

    知道船用变压有哪些吗?

    在船舶和海洋平台上,电力系统的稳定运行至关重要,而船用变压作为其中的关键设备,其种类繁多,各具特点。知道船用变压有哪些吗?让我们一起揭开
    的头像 发表于 06-01 00:00 864次阅读
    <b class='flag-5'>你</b>知道船用变压<b class='flag-5'>器</b>有哪些吗?

    使用寄存器点亮LED灯

    学习本章时,配合以上芯片手册中的“19. I/O Ports”章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。本章内容涉及到较多寄存器方面的深入内容,对于初学者而言这些内容丰富也较难理解,但非常有必要细读研究、夯实基础。
    的头像 发表于 05-28 17:37 1457次阅读
    使用<b class='flag-5'>寄存器</b>点亮LED灯

    第四章 什么是寄存器

    本篇文章我们讲解了寄存器的概念、地址映射和寄存器操作等内容,内容比较干,大家有个概念即可,不要求全部熟记掌握,有需要时可重复查阅观看。下篇我们将开始进行实操内容,通过控制单片机的GPIO来点亮
    的头像 发表于 05-21 14:23 1662次阅读
    第四章 什么是<b class='flag-5'>寄存器</b>