1909_Arm Cortex-M3编程模型

1909_Arm Cortex-M3编程模型

全部学习汇总: g_arm_cores: ARM内核的学习笔记 (gitee.com)

编程模型的部分除了单独的核心寄存器描述之外,它还包含有关处理器模式和软件执行和堆栈的特权级别的信息。

处理器有两种模式,分别是线程模式和Handler模式;软件有两种权限级别,分别是非特权级别和特权级别。

两种处理器模式种,线程模式主要是用来执行应用软件。当处理器从复位状态中出来之后会进入到线程模式。Handler模式是用来处理各种异常的,处理器在完成异常处理之后依然会回到线程模式。

只有特权软件才能写入CONTROL寄存器以更改线程模式下软件执行的特权级别。非特权软件可以使用SVC指令进行主管调用,将控制权转移给特权软件。这样,如果是在线程模式下,如果已经具有了特权可以直接切换到非特权。否则得做一次SVC调用。

内核使用递减的堆栈模型,而且实现了2个堆栈,分别为main stack和process stack。

这个表格是对上面信息很好的一个总结,当我看完前面的信息之后看到这个表格的时候我觉得,可能以后回看前面的内容是没有太大必要的,这个表格基本上就可以给我大部分关键的信息。

这是内核相关的寄存器,其中,通用寄存器中有几个是作为专用功能寄存器来用的,分别是R13、R14、R15,代表SP、LR和PC。这部分在看AAPCS的时候也已经看过了。

SP寄存器究竟代表什么含义,这个是有CONTROL寄存器来决定的。

在复位时,处理器用复位向量的值加载PC,该值位于地址0x00000004。

这几个寄存器中可以获取进位、大小判断、是否为0等多种信息,看到这些信息后觉得很有大学时代的场景代入感。不过,现在工程师做软件开发的时候一般直接面向C,不需要考虑这么多的底层逻辑状态了。

这个是APSR的寄存器定义。

这是IPSR的定义。IPSR包含当前中断服务例程(ISR)的异常类型编号。

这个是EPSR的定义。包含Thumb状态位以及执行状态位。使用MSR指令直接通过应用软件读取EPSR的尝试总是返回零。在应用软件中使用MSR指令写入EPSR的尝试将被忽略。故障处理程序可以检查堆叠PSR中的EPSR值,以指示发生故障的操作。

可中断继续指令是针对加载多条指令的一种中断情况,执行LDM以及STM的时候处理器会执行暂停以及继续的操作,此时,中间的临时状态会存储在EPSR中。

If-Then块在16位IT指令之后最多包含4条指令。块中的每条指令都是有条件的。指令的条件要么是相同的,要么是相反的。

几个掩码寄存器:Exception、Priority、Fault。分别可以禁用exception、优先级可以配置的中断以及所有的非NMI中断。

这个寄存器是可以读取的,在FreeRTOS的移植版本中也是见到过的。

以上是之前看到过的代码。

这个是控制寄存器的定义,前面已经看到过多次这个信息。主要是两部分,SP的类型以及线程的权限。

当改变堆栈指针时,软件必须在MSR指令之后立即使用ISB指令。这确保ISB之后的指令使用新的堆栈指针执行。

常见的CMSIS是Cortex系列的MCU软件接口标准的缩写,提供了对应寄存器的访问,也提供了便于RTOS内核开发的标准接口。

这个是内核相关的存储映射定义。

简单总结以上属性的特点:

  • Normal:可重新排序
  • Device:可以缓冲但是不能重新排序
  • Strongly-ordered:连缓冲也不允许
  • XN:这里不能够取指令

能够很容易理解的几个点:

  • 外设不会提供指令存储;
  • 外部RAM可以用来存储code指令;
  • 外部设备不可以提供指令;

这是为了能够保证数据或者指令的一致性而提供的几条指令。

由此看,读取动作才是唯一的保护机制。

有的编译器会提供相应的C函数来实现对应指令的生成。

异常的状态:未激活、挂起、激活、激活并挂起。从最后一个描述看,异常其实是可以有一个二级的缓冲。

上面是几个比较特殊的exception。超级调用(SVC)是由SVC指令触发的异常。在操作系统环境中,应用程序可以使用SVC指令访问操作系统内核函数和设备驱动程序。PendSV是系统级服务的中断驱动请求。在操作系统环境中,当没有其他异常活动时,使用PendSV进行上下文切换。SysTick可以用来作为系统的Tick时钟,IRQ则是常用的中断,通常是外设。

这是几种不同的异常处理方式。

这是异常向量表的定义。在系统复位时,向量表固定在地址0x00000000。特权软件可以写VTOR,将向量表的起始地址重新定位到不同的内存位置,在0x00000080到0x3FFFFF80的范围内。

  • 异常的优先级数字越小代表的优先级越高。
  • 除了Reset、Hard fault以及NMI之外,其他的异常的优先级都是可以配置的。

组优先级之间不会进行抢占,但是会决定执行的优先级。

关于编程模型的部分暂且梳理到这里,剩下的内容主要是关于各种错误异常的原因介绍,这类问题等我遇到对应问题的时候再把这个文件作为字典回查会好一些。

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

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

相关文章

揭秘CPU可视化:探索计算机心脏的神秘之旅

在数字化飞速发展的今天,中央处理器(CPU)作为计算机的心脏,其复杂度和重要性不言而喻。 中央处理器,这个小小的芯片,却承载着计算机运行的所有指令和数据处理任务。它的内部构造复杂而精密,每一…

哪些公司在招聘GIS开发?为什么?

之前我们给大家整理汇总了WebGIS在招岗位的一些特点,包括行业、学历、工作经验等。WebGIS招聘原来看重这个!整理了1300多份岗位得出来的干货! 很多同学好奇,这些招GIS开发的都是哪些公司?主要是做什么的? …

Cesium 自定义Primitive - 圆

一、创作思路 1、创建一个自定义CustomPrimitive 2、然后根据两个点,生成圆 3、方便后期绘制圆 二、实现代码 1、在vue的包中加入turf. npm install turf/turf 1、创建一个CustomCirclePrimitive类,并加入更新的代码 export default class CustomCirclePrimitive …

【Simulink系列】——控制系统仿真基础

声明:本系列博客参考有关专业书籍,截图均为自己实操,仅供交流学习! 一、控制系统基本概念 这里就不再介绍类似于开环系统、闭环系统等基本概念了! 1、数学模型 控制系统的数学模型是指动态数学模型,大致…

车辆伤害VR安全教育培训复用性强

VR工地伤害虚拟体验是一种新兴的培训方式,它利用虚拟现实技术为参与者提供身临其境的体验。与传统的培训方式相比,VR工地伤害虚拟体验具有许多优势。 首先,VR工地伤害虚拟体验能够模拟真实的工作环境和事故场景,让参与者在安全的环…

基于单片机的晾衣架控制系统设计

目 录 摘 要 I Abstract II 引 言 1 1 系统方案设计 3 1.1 系统方案论证 3 1.2 系统工作原理 4 2 硬件设计 5 2.1 单片机 5 2.2 按键设计 7 2.3 光线检测模块 8 2.4 雨滴检测模块 9 2.5 电压比较器 10 2.6 微动步进电动机 11 2.7 硬件电路原理图 12 3 系统主要软件设计 14 3.1…

买不到的数目c++

题目 输入样例: 4 7输出样例: 17 思路 一个字,猜。 一开始不知道怎么做的时候,想要暴力枚举对于特定的包装n, m,最大不能买到的数量maxValue是多少,然后观察性质做优化。那么怎么确定枚举结果是否正确呢…

主题乐园如何让新客变熟客,让游客变“留客”?

群硕跨越时间结识了一位爱讲故事的父亲,他汇集了一群幻想工程师,打算以故事为基础,建造一个梦幻的主题乐园。 这个乐园后来成为全球游客最多、收入最高的乐园之一,不仅在2023财年创下了近90亿(美元)的营收…

独家揭秘:AI大模型在实践中的应用!

在当今社会,人工智能技术被广泛应用于各行各业。其中,AI大模型作为人工智能领域的热门话题,正逐渐成为现实生活中的重要应用。AI大模型是一种基于深度学习和神经网络技术的计算机模型,能够通过大规模数据的训练和学习,…

SpringMVC-异步调用,拦截器与异常处理

1.异步调用 1.发送异步请求 <a href"javascript:void(0);" id"testAjax">访问controller</a> <script type"text/javascript" src"js/jquery-3.7.1.js"></script> <script type"text/javascript&qu…

C语言学习--练习2

目录 1.排序数组 2.多数元素 3.存在重复元素 4.最大间距 5.按奇偶排序数组 6.最小时间差 1.排序数组 /*** Note: The returned array must be malloced, assume caller calls free().*/ int cmp(const void*a,const void*b){return *(int*)a-*(int*)b; } int* sortArray(i…

C语言抽象代码(其五)

水博客 今天突发奇想&#xff0c;可不可以用中文写代码。 然后我发现可以用#define完成。 我们看代码 非常好理解就是用前面代替后面。比如&#xff1a; 主函数 代替 int main 非常简单

二叉搜索树题目:二叉搜索树迭代器

文章目录 题目标题和出处难度题目描述要求示例数据范围进阶 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 解法三思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;二叉搜索树迭代器 出处&#xff1a;173. 二叉搜索树迭代器 难度 4 级 题目…

计讯物联智慧工业园区系统平台全面提升园区智能化水平

工业园区聚集着各种生产要素&#xff0c;是纺织、机械、家具等诸多产业集中的区域&#xff0c;更是资源消耗和污染物排放的集中地。根据某些工业园区环境调研&#xff0c;园区入驻企业从生产原料到生产制造过程大多带有有毒有害、易燃易爆的特性&#xff0c;再加上装置大型化、…

SpringBoot 热部署。

SpringBoot 热部署。 文章目录 SpringBoot 热部署。 pom.xml。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional…

LeetCode-第137题-只出现一次的数||

1.题目描述 给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。 2.样例描述 3.思路描述 先把数组排序&am…

M2TS转MP4怎么转?超快的方法~

M2TS格式的优点主要体现在对高清视频的完美支持&#xff0c;能够提供极致的视觉体验。然而&#xff0c;由于其相对较大的文件大小&#xff0c;有时可能不太适合网络传输。此外&#xff0c;部分不支持M2TS的播放设备可能导致一定的兼容性问题。 想要播放m2ts视频&#xff0c;可…

【kubernetes】关于k8s集群如何将pod调度到指定node节点?

目录 一、k8s的watch机制 二、scheduler的调度策略 Predicate&#xff08;预选策略&#xff09; 常见算法&#xff1a; priorities&#xff08;优选策略&#xff09;常见的算法有&#xff1a; 三、k8s的标签管理之增删改查 四、k8s的将pod调度到指定node的方法 方案一&am…

DFS回溯-经典全排列问题(力扣)

前言 对于全排列问题&#xff0c;常用的做法是设置一个vis数组来确定位置i上的数字是否被访问&#xff0c;因为是全排列问题&#xff0c;所以不同的顺序也是不一样的排列&#xff0c;因此每次都是从起点开始询问**(注意起点到底是0还是1)** 46全排列(最简单的模板) class So…

某资产管理系统打点过程中的免杀经历

上周&#xff0c;被扔过来单位内部的一个链接&#xff0c;让渗透一下&#xff0c;本以为三下五除二很快就能测完&#xff0c;没想到在对抗杀软时费了一番功夫&#xff0c;再加上杂七杂八的事儿&#xff0c;经过了一个星期才测完(&#xff03;&#xffe3;&#xff5e;&#xff…