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

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【论文精读】RELIEF: Reinforcement Learning Empowered Graph Feature Prompt Tuning

RELIEF: Reinforcement Learning Empowered Graph Feature Prompt Tuning 前言AbstractMotivationSolutionRELIEFIncorporating Feature Prompts as MDPAction SpaceState TransitionReward Function Policy Network ArchitectureDiscrete ActorContinuous ActorCritic Overall…

【C++】精妙的哈希算法

🚀个人主页:小羊 🚀所属专栏:C 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 一、哈希结构1、哈希概念2、哈希函数3、哈希冲突3.1 闭散列3.2 开散列 4、完整代码 一、哈希结构 1、哈希概念 A…

C# WPF 仿 Android Toast 效果

转载请注明出处: https://blog.csdn.net/hx7013/article/details/142860084 主职Android, 最近需要写一些WPF的程序作为上位机,目前WPF的MessageBox过于臃肿,且想找一个内置的非阻塞的简单提示一直找不到,想到了Android的Toast所以写了这个扩…

低代码可视化-uniapp购物车页面-代码生成器

购物车页面是电子商务网站或应用程序中的一个关键功能页面,它允许用户查看、编辑和管理他们选择加入购物车的商品。下面通过低代码可视化实现一个uniapp购物车页面,把购物车整个事件都集成进去。实现完成后可以保存为页面模板。 收货地址选择 如果尚未…

yolov9目标检测/分割预测报错AttributeError: ‘list‘ object has no attribute ‘device‘常见汇总

这篇文章主要是对yolov9目标检测和目标分割预测测试时的报错,进行解决方案。 在说明解决方案前,严重投诉、吐槽一些博主发的一些文章,压根没用的解决方法,也不知道他们从哪里抄的,误人子弟、浪费时间。 我在解决前&…

JVM 实战篇(一万字)

此笔记来至于 黑马程序员 内存调优 内存溢出和内存泄漏 内存泄漏(memory leak):在Java中如果不再使用一个对象,但是该对象依然在 GC ROOT 的引用链上,这个对象就不会被垃圾回收器回收,这种情况就称之为内…

Rust usize类型(用来表示地址的类型)Rust地址与指针的区别(Rust指针)

文章目录 Rust usize类型Rust地址与指针的区别(指针有数据类型,而地址只是一个数字)指针地址使用场景示例 Rust usize类型 在Rust中,地址通常表示为usize类型,这是因为usize是专门设计用来存储指针大小的无符号整型&a…

vue综合指南(五)

​🌈个人主页:前端青山 🔥系列专栏:Vue篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Vuet篇专栏内容:vue综合指南 目录 81 简述每个周期具体适合哪些场景 82、Vue $forceUpdate的原理 83、vue获取数…

MySQL—关于数据库的CRUD—(增删改查)

文章目录 关于数据库的使用:1. 数据库的背景知识:2. MYSQL数据库软件的使用(MYSQL安装的问题在另一篇博客中讲解)。(1)启动MYSQL数据库软件(2)开始使用数据库程序:1&…

leetcode动态规划(一)-理论基础

本节主要参考:代码随想录 题目分类 动态规划释义 动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。 动态规划中每一个状态一定是由上一个状态推导出来…

车辆管理的SpringBoot技术革新

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了车辆管理系统的开发全过程。通过分析车辆管理系统管理的不足,创建了一个计算机管理车辆管理系统的方案。文章介绍了车辆管理系统的系统分析部分&…

使用 OpenWebUI 一键部署 Mistral-Large-Instruct-2407-AWQ

教程及模型简介 该教程是使用 OpenWebUI 一键部署 Mistral-Large-Instruct-2407-AWQ,相关环境和配置已经搭建完成,只需克隆启动容器即可进行推理体验。 Mistral-Large-Instruct-2407-AWQ 是法国人工智能公司 Mistral AI 发布的新一代旗舰 AI 模型&…

操作系统简介:作业管理

作业管理 一、作业管理1.1 作业控制1.2 作业的状态及其转换1.3 作业控制块和作业后备队列 二、作业调度2.1 调度算法的选择2.2 作业调度算法2.3 作业调度算法性能的衡量指标 三、人机界面 作业:系统为完成一个用户的计算任务(或一次事务处理)…

RabbitMQ 核心功能详解

引言 在现代分布式系统中,消息队列已经成为一种不可或缺的组件。它不仅能够实现应用之间的解耦,还能提高系统的灵活性和可扩展性。RabbitMQ 是一款基于 AMQP(Advanced Message Queuing Protocol)协议的消息中间件,以其…

【人工智能】人工智能的10大算法详解(优缺点+实际案例)

人工智能(AI)是现代科技的重要领域,其中的算法是实现智能的核心。本文将介绍10种常见的人工智能算法,包括它们的原理、训练方法、优缺点及适用场景。 1. 线性回归(Linear Regression) 模型原理 线性回归…

2021年10月自考《软件开发工具》03173试题

目录 一.选择题 二.填空题 三.简答题 五.综合题 一.选择题 1.下列各项属于集成化开发工具的是 (书中)P96页 A.WORDSTAR B.FLOW C.Dictionary/3000 D.Visual Studio 2.软件工程的思想主要服务于 (书中)P84页面 A.用户 B.项目…

虚拟现实辅助工程技术在现代汽车制造中的重要性

虚拟现实辅助工程(VR Aided Engineering),简称VAE,作为数字化转型的重要手段,在各行各业被越来越广泛的应用。随着汽车变得越来越复杂,虚拟现实辅助工程技术逐渐成为汽车行业产品开发过程中不可或缺的一部分…

Redis --- 第四讲 --- 常用数据结构 --- string类型

一、认识数据类型和编码方式 有序集合,相当于除了存储member之外,还需要存储一个score(权重,分数) Redis底层在实现上述数据结构的时候,会在源码层面,针对上述实现进行特定的优化,来…

3 机器学习之假设空间

归纳(induction)与演绎(deduction)是科学推理的两大基本手段。前者是从特殊到一般的“泛化”(generalization)过程,即从具体的事实归结出一般性规律;后者则是从一般到特殊的“特化”(specialization)过程,即从基础原理推演出具体状况。例如&a…

学习JAVA中的Spring MVC常用注解及三层架构,这一篇就够了

Spring Web MVC 一:什么是 Spring Web MVC?什么是Servlet呢?什么是Servlet API1.1 MVC 定义1.2 什么是Spring MVC ?1.3SpringBoot和SpringMVC的区别 二:Spring MVC中常用注解的使用2.1 RequestMapping:地址映射2.2 RequestBody:请…