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)作为计算机的心脏,其复杂度和重要性不言而喻。 中央处理器,这个小小的芯片,却承载着计算机运行的所有指令和数据处理任务。它的内部构造复杂而精密,每一…

antd-select组件样式,option下拉选中勾选样式,使用Drawer样式失效

注意:如果在使用抽屉Drawer组件时,在less写法中修改下拉样式ant-select-dropdown-menu不生效!检查是否设置Drawer组件getContainer属性是否为false 原因: getContainer 属性决定了 Drawer 渲染的 HTML 节点位置,默认情…

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

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

Java学习笔记11——内部类的继承与覆盖及总结

1、内部类的继承: 由于创建内部类对象的时候需要外部类的对象,所以在继承内部类的时候情况会比较复杂,需要确保内部类对象与外部类对象之间的引用正确建立,为了解决这个问题,Java提供了一种特殊的语法,来说…

Cesium 自定义Primitive - 圆

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

vue3 对于watch的再次理解 给响应式变量赋相同值时watch不会被触发。

问题 当我给响应式变量赋相同值时watch不会被触发。 之前一直对于watch的理解是会被频繁触发,值变化就会被执行,反之computed会缓存相同值。 看官方文档也没有相关说明,加上赋相同值的场景占少数 结论 在 Vue 3 中,watch 函数默…

钉钉登录前端处理

可参考官网&#xff1a;扫码登录第三方网站 - 钉钉开放平台 方式一&#xff1a;网站将钉钉登录二维码内嵌到自己页面中 <script src"https://g.alicdn.com/dingding/dinglogin/0.0.5/ddLogin.js"></script> 在需要使用钉钉登录的地方实例以下JS对象 …

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

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

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

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

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

目 录 摘 要 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…

Python常用语法汇总(一):字符串、列表、字典操作

1. 字符串处理 print(message.title()) #首字母大写print(message.uper()) #全部大写print(message.lower()) #全部小写full_name "lin" "hai" #合并字符串print("Hello, " full_name.title() "!")print("John Q. %s10s&qu…

买不到的数目c++

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

程序员的职业路径:如何选择适合自己的职业方向?

在当今数字化时代&#xff0c;作为一名程序员&#xff0c;选择正确的职业赛道至关重要。随着技术的迅速发展和市场的竞争加剧&#xff0c;程序员们需要认真思考自己的职业方向&#xff0c;并做出明智的决策。 自我评估与兴趣探索 首先&#xff0c;程序员们应该对自己进行深入…

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

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

[渗透教程]-022-内网穿透的高性能的反向代理应用

frp 简介 frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 项目地址 https://github.com/fatedier/frp安装 linux 配置方式见如下链接🔗 frp安装配置…

Kubernetes 二进制部署 《easzlab / kubeasz项目部署》- 03-安装容器运行时

Kubernetes 二进制部署 《easzlab / kubeasz项目部署》 03-安装容器运行时 03-安装容器运行时 项目根据k8s版本提供不同的默认容器运行时&#xff1a; k8s 版本 < 1.24 时&#xff0c;支持docker containerd 可选 k8s 版本 > 1.24 时&#xff0c;仅支持 containerd[roo…

亚马逊认证考试系列 - 知识点 - EMR简介

一、AWS EMR 简介 AWS EMR 是 Amazon Web Services 的托管 Hadoop 框架&#xff0c;它简化了在云中处理大规模数据的过程。EMR 支持基于 Hadoop、Spark、Presto 和其他大数据技术的分布式计算框架。主要特性和优势弹性伸缩&#xff1a;根据工作负载的需要自动扩展或收缩计算集…

vue2实现拖拽排序效果

1、首先下载 vuedraggable 插件 npm i -S vuedraggable2、使用方法 <template><div><div style"display: flex; justify-content: center; align-items: center"><div style"width: 120px; height: 60px; line-height: 60px; text-align…

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

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

利用小红书笔记利用小红书笔记API:开发者的内容创新利器

小红书是一个备受欢迎的社交平台&#xff0c;它为用户提供了分享购物心得、旅行体验、美妆技巧等内容的平台。对于开发者来说&#xff0c;小红书笔记API&#xff08;如果开放的话&#xff09;可以是一个强大的工具&#xff0c;用于实现内容创新、数据分析以及用户互动等多种功能…