当前位置: 首页 > news >正文

ARM RFEIA指令作用

FreeRTOS第一个任务如何run起来的

在给ARM cortex R5适配FreeRTOS的过程中,在执行第一个task时,都是使用vTaskStartScheduler()函数,把第一个task运行起来的,其中比较关键在port.c实现的xPortStartScheduler()函数中,在这个函数,会调用vPortRestoreTaskContext()函数,把第一个task给运行起来。主要流程如下:

vTaskStartScheduler()xPortStartScheduler()vPortRestoreTaskContext()

在vPortRestoreTaskContext()的实现主要如下:

portRESTORE_CONTEXT MACRO/* Set the SP to point to the stack of the task being restored. */LDR		R0, pxCurrentTCBConstLDR		R1, [R0]LDR		SP, [R1]/* Is there a floating point context to restore?  If the restoredulPortTaskHasFPUContext is zero then no. */LDR		R0, ulPortTaskHasFPUContextConstPOP		{R1}STR		R1, [R0]CMP		R1, #0/* Restore the floating point context, if any. */POPNE 	{R0}/*VPOPNE	{D16-D31}*/VPOPNE	{D0-D15}VMSRNE  FPSCR, R0/* Restore the critical section nesting depth. */LDR		R0, ulCriticalNestingConstPOP		{R1}STR		R1, [R0]/* Ensure the priority mask is correct for the critical nesting depth. */CMP		R1, #0MOVEQ	R0, #255LDRNE	R0, ulMaxAPIPriorityConstLDRNE	R0, [R0]LDR		R4, vPortSetInterruptMaskAsmConstBLX		R4/* Restore all system mode registers other than the SP (which is alreadybeing used). */POP		{R0-R12, R14}/* Return to the task code, loading CPSR on the way. */RFEIA	sp!ENDMvPortRestoreTaskContext:/* Switch to system mode. */CPS		#SYS_MODEportRESTORE_CONTEXT

从portRESTORE_CONTEXT宏的实现来看,代码非常简单,就是从当前任务中获取到栈指针,然后赋值给sp,然后就把该task的stack内容给恢复出来。获取栈指针如下图所示:

未获取栈指针之前,系统使用的sp如下:
在这里插入图片描述
获取task栈指针之后,系统使用的sp如下:
在这里插入图片描述
恢复了task的cpu context后,没有看到给PC指针赋值的情况,依赖RFEIA sp!这条指令,就可以把pc赋值了,如下所示:
在这里插入图片描述
可以看出,RFEIA sp!这条指令是从栈里把pc恢复了,pc就会往0x0040f160这个地址跳转过去,这个地址刚好是当前运行任务的入口地址,如下所示:
在这里插入图片描述
ARM技术手册对RFE指令说明如下:
在这里插入图片描述

相关文章:

ARM RFEIA指令作用

FreeRTOS第一个任务如何run起来的 在给ARM cortex R5适配FreeRTOS的过程中,在执行第一个task时,都是使用vTaskStartScheduler()函数,把第一个task运行起来的,其中比较关键在port.c实现的xPortStartScheduler()函数中,…...

【Kubernetes】常用命令全解析:从入门到实战(上)

🐇明明跟你说过:个人主页 🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、Kubernetes简介 2、安装Kubernetes …...

项目实战(11)-双通道气体压力计V1.0

一. 产品简介: 1、项目背景是在实际应用中需要监控通道内气体的压力,压力计分为两个通道;通道一时实时监控;通道二是保压,设定保压值得上下限后通道内得气体压力值会一直保持在这个范围内。 二. 应用场景&#xff1a…...

Node.js怎么调用到打包的python文件呢

在 Node.js 中调用打包后的 Python 可执行文件(如 PyInstaller 生成的 .exe 或二进制文件),可以通过以下步骤实现: 一、Python 打包准备 假设已有打包好的 Python 文件 your_script.exe(以 Windows 为例)&…...

Transformer 详解:了解 GPT、BERT 和 T5 背后的模型

目录 什么是 Transformer? Transformer如何工作? Transformer 为何有用? 常见问题解答:机器学习中的 Transformer 在技​​术领域,突破通常来自于修复损坏的东西。制造第一架飞机的人研究过鸟类。莱特兄弟观察了秃鹫如何在气流中保持平衡,意识到稳定性比动力更重要。…...

利用二分法进行 SQL 盲注

什么是sql注入? SQL 注入(SQL Injection)是一种常见的 Web 安全漏洞,攻击者可以通过构造恶意 SQL 语句来访问数据库中的敏感信息。在某些情况下,服务器不会直接返回查询结果,而是通过布尔值(Tr…...

如何通过 bugreport 分析 Android 系统日志?

📢 1. 职业规划篇 来聊聊安卓职业规划?整机开发大专能做么? 📢 2.基础篇 基础篇.前言 基础篇.编译环境搭建 基础篇.源码目录简介 基础篇.系统 mk_bp 讲解 基础篇.开机动画定制 基础篇.定制桌面壁纸、导航方式 基础篇.系统属性、ap…...

安防机器人电源解决方案

安防机器人电源方案简介 随着安防机器人领域技术的不断进步,越来越多的新型传感器,特别是激光雷达(光探测与测距)的广泛应用,以及先进的板载AI处理器的加入,使得机器人能够更加安全、智能地与人类进行互动。然而,这也对机器人的电源系统提出了更高的要求。某安防机器人…...

内网穿透的应用-Ubuntu本地Docker搭建pichome文件管理系统打造个人云相册

文章目录 前言1.关于pichome2.本地部署pichome3.简单使用pichome4. 安装内网穿透5.配置pichome公网地址6. 配置固定公网地址 前言 你是不是也经常遇到这样的尴尬:手机、电脑里堆满了照片和视频,想找一张特定的图片时却像在大海捞针一样无从下手&#xf…...

力扣-栈与队列-1047 删除字符串中的所有相邻重复项

思路 利用栈更新紧邻的元素&#xff0c;和要插入的元素作比较 代码 class Solution { public:string removeDuplicates(string s) {if(s.size() < 2) return s;stack<char> st;st.push(s[0]);for(int i 1; i < s.size(); i){if(!st.empty() && s[i] s…...

旅客服务系统(PSS, Passenger Service System)

1. 系统概述 1.1 系统目标 旅客服务系统(PSS)旨在为旅客提供一站式航空服务,涵盖航班信息查询、机票预订、值机办理、行李托运、订单管理、支付集成等功能。系统通过模块化设计和分布式架构,确保高可用性、高性能、可扩展性和安全性,满足航空公司和旅客的多样化需求。 …...

Linux路径中的‘~‘

本文来自DeepSeek 在Linux中&#xff0c;~ 是用户主目录的简写。具体含义如下&#xff1a; 当前用户的主目录&#xff1a; ~ 代表当前登录用户的主目录。例如&#xff0c;用户 alice 的主目录通常是 /home/alice&#xff0c;~ 就指向 /home/alice。 其他用户的主目录&#xff…...

认识网络安全

一 网络攻击链 踩点-工具准备-载荷投递-漏洞利用-释放载荷-建立通道-目标达成 简化下&#xff1a; 目标侦察&#xff1a;准确识别目标&#xff0c;收集目标详细信息&#xff0c;比如 网络、 邮箱、员工、社会关系、对外提供服务、漏洞 信息等&#xff0c;为 后续攻击做准备。…...

信息科技伦理与道德3-3:智能决策

2.3 智能控制 智能控制算法介绍 智能控制算法的优化&#xff1a;性能提升的秘诀 https://blog.csdn.net/universsky2015/article/details/137309308 案例一&#xff1a;特斯拉自动驾驶汽车未能识别白色卡车导致车祸...

以 Python 为工具搭建的热门旅游景点数据分析系统

系统介绍&#xff1a; 随着计算机技术的飞速发展&#xff0c;计算机系统的应用已广泛渗透到社会的各个领域。大数据的大量应用为人们的生活带来了极大的便利。在此背景下&#xff0c;将热门旅游景点数据分析管理与互联网相结合&#xff0c;利用计算机搭建热门旅游景点数据分析…...

ZooKeeper 技术全解:概念、功能、文件系统与主从同步

引言 随着分布式系统变得越来越复杂&#xff0c;对协调服务的需求也在不断增长。ZooKeeper 作为一个由 Apache 维护的开源分布式协调服务框架&#xff0c;广泛用于 Hadoop 生态系统和其他需要协调的分布式环境中。这一系统旨在解决分布式应用中常见的挑战&#xff0c;如配置管…...

Visual Studio Code 的 AI 编程助手

文章目录 1. 写在最前面2. AI 编程助手2.1 Top 10 AI Extensions for Visual Studio Code2.1.1 脑图概括2.1.2 详细介绍 2.2 10 Best AI Code Tools: Quick and Easy Guide (2024)2.2.1 脑图概括2.2.2 详细介绍 3. Cody 插件试用4. 碎碎念5. 参考资料 1. 写在最前面 最近在研究…...

Kafka的ISR是什么,HW是什么,怎么保证可靠性,Kafka怎么实现顺序消息?为什么Kafka的broker上的topic越多,效率越慢?

目录 1. Kafka 的 ISR 是什么 2. Kafka 的 HW 是什么 3. Kafka 如何保证可靠性 4. Kafka 怎么实现顺序消息 5. 为什么 Kafka 的 broker 上的 topic 越多,效率越慢 1. Kafka 的 ISR 是什么 ISR 即 In-Sync Replicas(同步副本集),是 Kafka 中一个重要的概念,用于保障消…...

Ollama系列---【ollama使用gpu运行大模型】

一、安装CudaToolkit 使用控制台命令查看当前显卡驱动中的cuda版本 nvidia-smi 二、下载CudaToolkit 注意&#xff1a;CudaToolkit版本要低于上面的显卡Cuda版本。 Cuda各版本下载地址&#xff1a;CUDA Toolkit Archive | NVIDIA Developer 下载好之后&#xff0c;一路下一步&a…...

使用C语言实现MySQL数据库的增删改查操作指南

使用C语言与MySQL数据库进行交互,通常涉及使用MySQL提供的C API库。这套API允许开发者在C/C++程序中执行SQL查询,从而实现数据库的增删改查操作。下面,我将详细介绍如何在C语言中实现这些基本操作。 准备工作 安装MySQL开发库:确保你的系统上安装了MySQL服务器以及MySQL开发…...

【Golang学习之旅】Go + Redis 缓存设计与优化(项目实战)

文章目录 业务需求1. 缓存设计2. GoRedis代码实现3. 代码解析4. 性能优化 在本节中&#xff0c;我们将通过一个实际的项目案例&#xff0c;演示如何在 Go 中使用 Redis 实现高效的缓存设计与优化。 业务需求 假设我们正在开发一个电商平台&#xff0c;需要缓存商品信息以提高页…...

2、k8s 二进制安装(详细)

k8s 二进制安装 IP规划初始化部署 etcd 集群在 etcd01 节点上操作准备cfssl证书生成工具&#xff0c;加权生成etcd证书上传etcd软件包启动 etcd 服务 部署 Master 组件部署 Worker Node 组件node 节点安装 docker部署组件 部署 CNI 网络组件部署 flannel简介部署 部署 Calico简…...

安卓开发,底部导航栏

1、创建导航栏图标 使用系统自带的矢量图库文件&#xff0c;鼠标右键点击res->New->Vector Asset 修改 Name , Clip art 和 Color 再创建一个 同样的方法再创建四个按钮 2、添加百分比布局依赖 app\build.gradle.kts 中添加百分比布局依赖&#xff0c;并点击Sync Now …...

CWOI-N RER 1 > 2 Solution

CWOI-N RER 1 > 2 Solution 声明&#xff1a;头图为断章取义。 这场比赛得 200 200 200 分是保底&#xff0c;得 300 300 300 分是基操&#xff0c;得 350 350 350 分以上才是实力&#xff08;但不多&#xff09;。 A - 机读卡 No solutions yet. 这题数据倒还不能无…...

字节跳动后端一面

&#x1f4cd;1. Gzip压缩技术详解 Gzip是一种流行的无损数据压缩格式&#xff0c;它使用DEFLATE算法来减少文件大小&#xff0c;广泛应用于网络传输和文件存储中以提高效率。 &#x1f680; 使用场景&#xff1a; • 网站优化&#xff1a;通过压缩HTML、CSS、JavaScript文件来…...

Dify 框架连接 PGSQL 数据库与 Sandbox 环境下的 Linux 系统调用权限问题

Dify 框架连接 PGSQL 数据库与 Sandbox 环境下的 Linux 系统调用权限问题 背景 在使用 Dify 框架进行开发时&#xff0c;遇到了两个主要的技术挑战&#xff1a; 代码节点连接到 PGSQL&#xff08;PostgreSQL&#xff09;数据库。解决沙盒环境中由于系统调用限制导致的“oper…...

ModuleJS 与 CommonJS 混用的两种解决方案

目录 方案一 方案二 统一使用 ModuleJS 统一使用CommonJS 方案一 使用构建工具&#xff0c;webpack、vite等系列构建工具。这些构建工具底层则会将两种不同的系统模块语言转为同一种语言&#xff0c;然后代码也能正常执行。 方案二 如果你可以修改文件的文件后缀&#xf…...

代码随想录--977有序数组的平方

977 有序数组的平方 题目&#xff1a; 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&…...

Win11下搭建Kafka环境

目录 一、环境准备 二、安装JDK 1、下载JDK 2、配置环境变量 3、验证 三、安装zookeeper 1、下载Zookeeper安装包 2、配置环境变量 3、修改配置文件zoo.cfg 4、启动Zookeeper服务 4.1 启动Zookeeper客户端验证 4.2 启动客户端 四、安装Kafka 1、下载Kafka安装包…...

MacBook Pro M2安装deepseek

序 本文主要展示一下如何在MacBook Pro M2安装deepseek mac配置 芯片Apple M2&#xff0c;8核(物理)&#xff0c;内存16G&#xff0c;os版本Ventura&#xff0c;磁盘500G 步骤 下载ollama 去https://ollama.com/下载mac版本 或者使用go来编译 git clone --depth 1 http…...