ARM Cortex-M核的内核态,用户态
首先,用户态和内核态是从操作系统层面上来划分的,如果没有操作系统,我可以直接运行在特权模式下,并使用特权指令。在这种情况下,我将负责管理和控制系统资源,执行关键操作,以及确保系统的安全性和稳定性。我可以直接操作底层硬件寄存器和资源,包括使用特权指令来执行必要的操作。像51单片机,可以使用特权指令,直接访问和操作底层硬件资源,例如配置I/O口、定时器、中断等。
但是在使用操作系统层面下,例如FreeRTOS:FreeRTOS 有意将特权指令与用户程序进行了隔离,以确保系统的安全性和稳定性。
FreeRTOS 使用了多种机制来实现特权指令与用户程序的隔离:
- 特权级别:FreeRTOS 内核运行在较高的特权级别(特权模式),而用户程序运行在较低的特权级别(非特权模式)。所以即便在用户程序上我用了特权指令,但是因为特权级别不够,我的特权指令也不会生效。
- 上下文切换:当发生任务切换时,FreeRTOS 会保存当前任务的上下文(包括寄存器状态等),并恢复下一个任务的上下文。用户程序无法直接控制上下文切换的过程,从而实现了对特权操作的隔离。
- 系统调用:FreeRTOS 提供了一组系统调用接口,允许用户程序通过这些接口请求操作系统代表其执行特权操作。系统调用是在特权模式下实现的,可以执行特权指令和访问特权级别下的资源。通过系统调用接口,用户程序可以间接地执行需要特权操作的功能,同时由操作系统验证和控制请求的合法性。
虽然在操作系统层面上,被划分出了用户态和内核态,但实际在ARM Cortex-M领域,并没有做到完全隔离。毕竟作为MCU,如果完全隔离,对开发会有很大的难度。而像ARM Cortex-A核系列,跑的是linux,一般会做到完全隔离,我们一般都是通过读写文件对设备进行操作,而不是直接对寄存器进行操作。
比如我已经知道了寄存器的地址:

我在某个任务中,直接对寄存器进行操作:

判断系统处于什么状态,可以在调试的时候看CPSR寄存器。
在ARM架构下:


相关文章:
ARM Cortex-M核的内核态,用户态
首先,用户态和内核态是从操作系统层面上来划分的,如果没有操作系统,我可以直接运行在特权模式下,并使用特权指令。在这种情况下,我将负责管理和控制系统资源,执行关键操作,以及确保系统的安全性…...
flex布局实战之自动填充剩余
案例目标 文字部分自适应并且居中 图中是一个弹窗,我现在使用flex的布局来实现,标题和关闭按钮。因为是uni-app,所以标签是view 。你可以自行替换为 代码 <view class"popup-box"><view class"title"><view class&…...
【LeetCode】203. 移除链表元素
203. 移除链表元素 难度:简单 题目 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出ÿ…...
IDEA2023版本创建Sping项目只能勾选17和21,却无法使用Java8?(已解决)
方案:替换创建项目的源 我们只知道IDEA页面创建Spring项目,其实是访问spring initializr去创建项目。故我们可以通过阿里云国服去间接创建Spring项目。将https://start.spring.io/或者http://start.springboot.io/替换为 https://start.aliyun.com/...
Vue生命周期详解
以下是 Vue 生命周期钩子函数分别做了什么事情的详细说明 详细说明 beforeCreate(创建前):在实例初始化之前调用。此时,实例的数据观测 (data observer)、属性和方法的运算,以及事件配置等内部设置都已完成࿰…...
政务大数据与资源平台建设解决方案:PPT全文75页,附下载
关键词:智慧政务解决方案,大数据解决方案,数据中心解决方案,数据治理解决方案 一、政务大数据与资源平台建设背景 1、政务大数据已成为智慧城市建设的必要基础 为响应国家不断加快5G基建、大数据、人工智能等新型基础设施建设布…...
环境监测传感器守护我们的地球
随着人类活动的不断增加,环境问题日益凸显。为了更好地保护我们的地球,环境监测成为了一项非常重要的任务。而在这个领域,传感器技术发挥着至关重要的作用。今天,我们就来聊聊WX-WQX12 环境监测传感器。 环境监测传感器是一种能够…...
PHP 循环控制 学习资料
PHP 循环控制 在 PHP 中,循环控制语句用于控制循环的执行流程,包括跳出循环、跳过当前迭代等操作。以下是 PHP 中常用的循环控制语句的介绍和示例: break 语句 break 语句用于立即跳出当前循环,并继续执行循环之后的代码。 示…...
Unity 关于生命周期函数的一些认识
Unity 生命周期函数主要有以下一些: Awake(): 在脚本被加载时调用。用于初始化对象的状态和引用。 OnEnable(): 在脚本组件被启用时调用。在脚本组件被激活时执行一次,以及在脚本组件被重新激活时执行。 Reset(): 在脚本组件被重置时调用。用于重置脚本…...
大数据学习(26)-spark核心总结
&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦ᾑ…...
EC 404 information economics
EC 404 information economics WeChat: zh6-86...
基于单片机的烟雾检测报警装置(论文+源码)
1.系统设计 (1)利用传感器实现环境中温度、烟雾浓度的实时检测; (2)系统检测的各项数据信息通过液晶模块进行显示,提高设计可视化; (3)系统可以根据实际情况利用按键模…...
C语言面试之旅:掌握基础,探索深度(面试实战之c语言关键词中篇)
劝人的话就像清晨的闹钟,只对别人有用,却永远叫不醒自己。 ----小新 一.预处理指令 (1)#define & typedef #define是C语言中定义的语法,是预处理指令,在预处理时进行简单而机械的字符串替换&…...
项目监控:项目跟踪和控制的工具和步骤
项目管理不仅仅是分配和审查任务,还包括平衡团队成员的工作量、创建预测和避免障碍的工作流程。整个过程涉及许多步骤,因此,项目监控成为了成功业务活动的关键之一,是项目经理确保与团队共同实施的计划顺利进行的方式。 项目监控为…...
GOAT:多模态、终身学习、平台无关的机器人通用导航系统
机器人应用中涉及到的核心技术包括:环境感知与理解、实时定位与建图、路径规划、行为控制等。GOAT通过多模态结合终生学习的方式让你的机器人可以在未知环境中搜索和导航到任何物体。小白也可以零门槛上手。 项目地址:https://theophilegervet.github.i…...
[webpack] webpack 插件大全
clean-webpack-plugin 一个webpack插件,用来删除/清理你的构建文件夹 html-webpack-plugin 该插件将为你生成一个 HTML5 文件, 在 body 中使用 script 标签引入你所有 webpack 生成的 bundle js 文件 zip-webpack-plugin 该插件用来压缩所有文件成一…...
UE4/UE5 雾
雾 UE4/UE5 雾平面雾材质效果图: 3D雾区材质效果图: UE4/UE5 雾 平面雾 做好将材质放在Plane上就行 材质 效果图: 3D雾区 做好将材质放在3D模型上就行 材质 效果图:...
Linux处理文件常见命令
目录 1 cp 2 rm 3 zip与unzip 3.1 zip 3.2 unzip 4 cd 5 ls 6 chmod 7 scp 7.1 文件在你操作的机器上,你要传给另一个机器 7.1.1 文件 7.1.2 文件夹 7.2 文件在另一个机器上,你要把文件搞到你操作的机器上 7.2.1 文件 7.2.…...
sed应用
一.sed 1.Sed概述 sed编辑器是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要存储在一个命令文本文件中。 2.sed命令的格…...
Linux配置SFTP用户的详细过程
0. 背景 Linux机器上已有路径/data/tomcat/apache-tomcat-8.5.96/webapps/webroot,需要在该路径之下配置一个目录对外暴露给业务人员使用。业务人员使用sftp协议上传文件。 下面是相关配置: SFTP 用户名:iios SFTP主目录:/data/tomcat/apa…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
