FreeRTOS学习笔记1

结合汇编

ldr r3, =pxCurrentTCB
ldr r2  

R3 value=0x20000054,R2 value=0x2002B950

pxCurrentTCB  020028950

pxTopOfStsck   0x2002B8FC   

解释这些寄存器的值是怎么变化的

1. ldr r3, =pxCurrentTCB
  • 这一行指令将 全局变量 pxCurrentTCB 的地址加载到寄存器 r3 中。
  • pxCurrentTCB 是 FreeRTOS 中一个指向当前任务控制块(TCB)的全局变量,它保存当前正在执行任务的 TCB 地址。
  • 比如:假设 pxCurrentTCB 存储在内存地址 0x20000054,这意味着 ldr r3, =pxCurrentTCB 执行后,r3 的值将是 0x20000054
2. ldr r2, [r3]
  • 这一行指令是从 r3 中存储的地址(即 pxCurrentTCB 的地址)处读取值,并将这个值存储到寄存器 r2 中。
  • 具体来说,这个值就是当前任务控制块(TCB)的地址。
    • 在你的情况中,pxCurrentTCB 的值是 0x2002B950(即当前任务 TCB 的地址)。
  • 这意味着执行 ldr r2, [r3] 之后,r2 的值将是 0x2002B950,也就是当前任务控制块的地址。

总体流程解释

  1. 第一行:ldr r3, =pxCurrentTCB

    • pxCurrentTCB 这个全局变量的地址加载到寄存器 r3 中。
    • 假设 pxCurrentTCB 位于内存地址 0x20000054,则 r3 的值是 0x20000054
  2. 第二行:ldr r2, [r3]

    • r3 指向的地址(pxCurrentTCB 的地址)处读取值,也就是当前任务控制块的地址。
    • 假设 pxCurrentTCB 的值是 0x2002B950,因此执行后 r2 中的值是 0x2002B950

如何联系 pxTopOfStack

  • pxCurrentTCB 是指向当前任务的 TCB 结构的指针,而每个任务的 TCB 结构中包含多个字段,其中之一是 pxTopOfStack,它存储了任务栈顶的指针。
  • 在这个例子中,当我们加载了 pxCurrentTCB 的值到 r2 后,r2 就指向了当前任务的 TCB 结构。
  • pxTopOfStack 是存储在 TCB 结构中的一个字段,它的值是栈顶指针。具体来说,pxTopOfStack = 0x2002B8FC

因此,ldr r2, [r3] 这条指令将当前任务的 TCB 地址(0x2002B950)加载到了寄存器 r2,接下来就可以通过访问 r2 中的 TCB 结构来获取其他字段的值,例如 pxTopOfStack

任务切换场景

  1. ldr r3, =pxCurrentTCB:加载 pxCurrentTCB 的地址到 r3(假设 0x20000054)。
  2. ldr r2, [r3]:从 pxCurrentTCB 中读取当前任务的 TCB 地址(0x2002B950),加载到 r2 中。
  3. 后续操作:可以使用 r2 访问当前任务的 TCB 结构中的字段(如 pxTopOfStack = 0x2002B8FC),用于保存或恢复任务的上下文。

两个地址的区别

  1. 0x20000054pxCurrentTCB 的地址

    • pxCurrentTCB 是一个全局变量,它的作用是保存当前任务控制块(TCB)的指针。这个全局变量本身存储在内存地址 0x20000054 处。
    • 换句话说,0x20000054pxCurrentTCB 这个变量的位置,也就是它的地址
  2. 0x2002B950 是当前任务的 TCB 地址

    • pxCurrentTCB 存储的值是当前任务控制块(TCB)的地址。这个地址指向当前正在运行的任务的 TCB 结构体。
    • 在你的例子中,pxCurrentTCB 的值是 0x2002B950,这意味着当前任务的 TCB 结构体存储在内存的 0x2002B950 处。

具体的工作原理

  1. pxCurrentTCB 的地址 0x20000054

    • pxCurrentTCB 是一个变量,存储在内存中的某个位置,在你的例子中它位于 0x20000054
  2. pxCurrentTCB 的值 0x2002B950

    • 这个全局变量(pxCurrentTCB)的值是当前任务的 TCB 的地址。在你的情况中,当前任务的 TCB 位于 0x2002B950 处。
ldr r3, =pxCurrentTCB
ldr r2, [r3]
  • ldr r3, =pxCurrentTCB

    • 这行代码把 pxCurrentTCB 这个全局变量的地址加载到了 r3 寄存器中。
    • 在你的情况中,pxCurrentTCB 存储在 0x20000054,所以这条指令执行后,r3 的值是 0x20000054
  • ldr r2, [r3]

    • 这行代码读取 r3 指向的内存地址中的内容。因为 r3 的值是 0x20000054,这个地址存放的是 pxCurrentTCB 的值。
    • pxCurrentTCB 的值是 0x2002B950,也就是当前任务 TCB 的地址。因此,执行这条指令后,r2 的值就变成了 0x2002B950,即当前任务的 TCB 地址

 谈下我的理解:地址0x20000054存储了pxCurrentTCB即当前任务控制块的地址 ,当提取地址0x20000054的值也就是提取当前任务控制块的地址,这个地址指向了0x2002B950,也就是任务真正的任务控制块的地址,当读取任务控制块的首个字段为栈顶指针,所以当读取TCB结构时首先得到的是栈顶指针的地址0x2002B8FC

简而言之:

  • 0x20000054 存储的是 pxCurrentTCB,它是当前任务控制块(TCB)的指针。
  • 当从 0x20000054 处读取值时,获取的是当前任务的 TCB 地址,也就是 0x2002B950
  • 然后,读取 TCB 结构的首个字段,该字段指向栈顶指针 pxTopOfStack,其值为 0x2002B8FC

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/450632.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络】详解TCP协议的延时应答、捎带应答、异常处理

【网络】详解TCP协议的延时应答和捎带应答 一. 延时应答模型 二. 捎带应答模型再谈四次挥手 三. 异常处理1.一方出现进程崩溃2.一方出现关机(正常流程关机)3.一方出现断电4.网线断开 一. 延时应答 也是基于滑动窗口,想要尽可能的去提高效率。…

用Java爬虫API,轻松获取taobao商品SKU信息

在电子商务的世界里,SKU(Stock Keeping Unit,库存单位)是商品管理的基础。对于商家来说,SKU的详细信息对于库存管理、价格策略制定、市场分析等都有着重要作用。taobao作为中国最大的电子商务平台之一,提供…

制药企业MES与TMS的数据库改造如何兼顾安全与效率双提升

*本图由AI生成 在全球制造业加速数字化转型的浪潮中,一家来自中国的、年营业额超过200亿元的制药企业以其前瞻性的视角和果断的行动,成为该行业里进行国产化改造的先锋。通过实施数据库改造试点项目,该企业实现了其关键业务系统MES&#xff0…

IEC104规约的秘密之九----链路层和应用层

104规约从TCP往上,分成链路层和应用层。 如图,APCI就是链路层,ASDU的就是应用层 我们看到报文都是68打头的,因为应用层报文也要交给链路层发送,链路层增加了开头的6个字节再进行发送。 完全用于链路层的报文每帧都只有…

【初阶数据结构】归并排序 - 分而治之的排序魔法

文章目录 前言1. 什么是归并排序?1.1 归并排序的步骤 2. 归并排序的代码实现2.1 归并排序代码的关键部分讲解2.1.1 利用递归2.1.2 将拆解的数组的元素放到一个临时空间中进行重新排序2.1.3 将在临时空间中排好的数组复制到目标数组中 3. 归并排序的非递归写法 前言 …

CTFHub | HTTP协议 - 请求方式 | 题解实操

CTFHUB 的 HTTP 请求方式题目为参与者带来了独特的挑战和学习机会。在这个题目中,要求参与者使用特定的方式请求来获取 flag。这不仅考验了参与者对 HTTP 请求方法的理解和掌握程度,还促使他们探索不同的工具和技术来解决问题。 题目背景设定在网络安全…

关于MyBatis-Plus 提供Wrappers.lambdaQuery()的方法

实例&#xff1a; private LambdaQueryWrapper<XXX> buildQueryWrapper(XXXBo bo) { Map<String, Object> params bo.getParams(); LambdaQueryWrapper<XXX> lqw Wrappers.lambdaQuery(); lqw.eq(bo.getOrgId() ! null, XXX::getOrgId, bo.getOrgId()); lq…

拼三角问题

欢迎来到杀马特的主页&#xff1a;羑悻的小杀马特.-CSDN博客 目录 一题目&#xff1a; 二思路&#xff1a; 三解答代码&#xff1a; 一题目&#xff1a; 题目链接&#xff1a; 登录—专业IT笔试面试备考平台_牛客网 二思路&#xff1a; 思路&#xff1a;首先明白能组成三角形…

新生入门季 | 学习生物信息分析,如何解决个人电脑算力不足的问题?

随着生物信息学在科研和教育中的快速普及&#xff0c;越来越多的新生开始接触基因组测序、RNA分析等复杂计算任务。然而&#xff0c;在面对这些大规模数据时&#xff0c;个人电脑的算力往往显得捉襟见肘。你是否也在为自己的笔记本性能不足而苦恼&#xff1f; 这篇文章将为你提…

JavaWeb——Maven(4/8):Maven坐标,idea集成-导入maven项目(两种方式)

目录 Maven坐标 导入Maven项目 第一种方式 第二种方式 Maven坐标 Maven 坐标 是 Maven 当中资源的唯一标识。通过这个坐标&#xff0c;我们就能够唯一定位资源的位置。 Maven 坐标主要用在两个地方。第一个地方&#xff1a;我们可以使用坐标来定义项目。第二个地方&#…

FreeRTOS - 软件定时器

在学习FreeRTOS过程中&#xff0c;结合韦东山-FreeRTOS手册和视频、野火-FreeRTOS内核实现与应用开发、及网上查找的其他资源&#xff0c;整理了该篇文章。如有内容理解不正确之处&#xff0c;欢迎大家指出&#xff0c;共同进步。 1. 软件定时器 软件定时器也可以完成两类事情…

Spring AI Alibaba 接入国产大模型通义千问

整体介绍 本文是一个详细的例子&#xff0c;讲解了如何基于spring ai 来调用通义千问国产大模型&#xff0c;有详细的代码和配置&#xff0c;并且免费。 Spring AI&#xff1a;简化Java开发者构建AI应用的统一框架 在过去&#xff0c;Java 开发者在构建 AI 应用时面临的一大…

【ios】解决xcode版本过低无法真机调式的问题

最低要求和支持的 SDK&#xff1a;Xcode - 支持 - Apple Developer 我的Xcode版本是14.2 手机系统版本是iOS15.8.3 步骤一 在终端中运行 open /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport 步骤二 先去https://github.com/fi…

AI 设计工具合集

&#x1f423;个人主页 可惜已不在 &#x1f424;这篇在这个专栏AI_可惜已不在的博客-CSDN博客 &#x1f425;有用的话就留下一个三连吧&#x1f63c; ​ 前言: AI 视频&#xff0c;科技与艺术的精彩融合。它借助先进的人工智能技术&#xff0c;为影像创作带来全新可能。本书…

星海智算:【萤火遛AI-Stable-Diffusion】无需部署一键启动

部署流程 1、注册算力云平台&#xff1a;星海智算 https://gpu.spacehpc.com/ 2、创建实例&#xff0c;镜像请依次点击&#xff1a;“镜像市场”->“更换”->“AI绘画”->“萤火遛AI-Stable Diffusion”。 程序首次启动可能需要几分钟&#xff0c;待实例显示“运行…

2009年国赛高教杯数学建模A题制动器试验台的控制方法分析解题全过程文档及程序

2009年国赛高教杯数学建模 A题 制动器试验台的控制方法分析 汽车的行车制动器&#xff08;以下简称制动器&#xff09;联接在车轮上&#xff0c;它的作用是在行驶时使车辆减速或者停止。制动器的设计是车辆设计中最重要的环节之一&#xff0c;直接影响着人身和车辆的安全。为了…

MOE论文详解(4)-GLaM

2022年google在GShard之后发表另一篇跟MoE相关的paper, 论文名为GLaM (Generalist Language Model), 最大的GLaM模型有1.2 trillion参数, 比GPT-3大7倍, 但成本只有GPT-3的1/3, 同时效果也超过GPT-3. 以下是两者的对比: 跟之前模型对比如下, 跟GShard和Switch-C相比, GLaM是第一…

[WPF初学到大神] 1. 什么是WPF, MVVM框架, XAML?

什么是WPF? WPF(Windows Presentation Foundation) 包含XAML标记语言和后端代码来开发桌面应用程序的. 用VS新建项目有WPF(.Net Framework和.Net应用程序), 该怎么选? 首选 .NET 应用程序(.NET Core 或 .NET 5/6/7/8新版本)拥有更好的性能、跨平台Windows, Linux, Mac支…

电气自动化13:PLC控制硬件组成与工作扫描原理

1.PLC硬件组成&#xff1a; CPU&#xff08;中央处理器&#xff09; 存储器 系统程序存储器用户程序存储器分为&#xff1a;用户程序存储器&#xff08;程序区&#xff09;、功能存储器&#xff08;数据区&#xff09; 输入/输出&#xff08;I/O&#xff09;接口电路 电源 …

SpringBoot优雅下线

一&#xff0c;什么是优雅下线 当我们需要部署新版本代码的时候&#xff0c;需要重启服务&#xff0c;这个时候可能会出现一些问题&#xff0c;比如之前服务正在处理的请求还在处理&#xff0c;这个时候如果强制的停止服务&#xff0c;会造成数据丢失或者请求失败的情况。那么…