3800个字彻底弄清cortex

3800个字彻底弄清cortex

  • arm内核发展历史
  • cortexM0系列芯片系统框图
  • 通用寄存器
  • m0特殊寄存器
  • m3/m4/m7特殊寄存器
    • MSP和PSP
    • xPSR
    • PRIMASK
    • CONTROL
    • FAULTMASK
    • BASEPRI
  • 栈空间操作
  • 异常和中断
    • 系统异常
  • NVIC可嵌套向量中断控制器
  • 系统操作寄存器
    • NVIC寄存器
    • 系统控制块SCB寄存器
    • SysTick寄存器
  • cortex-m0启动流程
  • 中断向量表
  • 大小端
  • 堆栈
    • 压栈的寄存器
  • 杂项指令集
  • M0/M3/M4/M7区别
  • M3系统框图
  • M3快速开关中断汇编指令
  • M3内核CONTROL寄存器
  • 异常和中断
  • MPU存储器保护单元

arm内核发展历史

arm内核架构
arm7armv6
cortex-m0armv6-m
cortex-m0+armv6-m
cortex-m3armv7-m
cortex-m4armv7-m
cortex-m7armv7-m
arm9ARMv6
arm11ARMv6
arm12ARMv6
cortex-a7armv7-a
cortex-a8armv7-a
cortex-a9armv7-a
cortex-a15armv7-a
cortex-A17armv7-a
cortex-A53armv8
cortex-A57armv8
cortex-A72armv8

cortexM0系列芯片系统框图

请添加图片描述

系统中包括:

  • 中断控制器
  • M0内核
  • AHB总线
  • 存储器和外设
  • 电源管理
  • 时钟树
  • 调试系统

通用寄存器

R0R1R2R3R4R5R6R7R8R9R10R11R12

m0特殊寄存器

SP(R13)LR(R14)PC(R15)CONTROLxPSRPRIMASK

m3/m4/m7特殊寄存器

SP(R13)LR(R14)PC(R15)CONTROLxPSRPRIMASKFAULTMASKBASEPRI

MSP和PSP

msp中断中会使用,psp用于线程栈使用,通过配置CONTROL寄存器切换。
系统复位后默认使用msp,中断中也使用msp。

xPSR

IPSR可以用来判断当前处于什么中断。

PRIMASK

中断屏蔽寄存器,写1屏蔽所有中断(除了不可屏蔽中断和hardfault)

CONTROL

第1bit写1表示切换成PSP

FAULTMASK

屏蔽所有的fault (NMI不受影响)

BASEPRI

屏蔽所有优先级不高于某个具体数值的中断

栈空间操作

栈向下递减
栈指针始终指向栈的最后一个数据,每次执行数据存储前(push),SP会首先减小

异常和中断

m0最多支持32个外部中断

系统异常

主要用于操作系统和错误处理

异常类型异常编号说明
reset1上电复位、系统复位
NMI2不可屏蔽中断
hardfault3硬件错误
SVCall11系统调用
PendSV13挂起系统调用
systick15系统滴答

NVIC可嵌套向量中断控制器

  • 中断可嵌套
  • 相同优先级的中断不可嵌套
  • 相同中断不可嵌套

系统操作寄存器

实际上是许多的系统管理的寄存器

地址范围寄存器说明
0xE000E008 - 0xE000E00FSystem Control Block Table
0xE000E010 - 0xE000E01F预留
0xE000E010 - 0xE000E01FSysTick操作寄存器
0xE000E100 - 0xE000E4EFNVIC操作寄存器
0xE000ED00 - 0xE000ED3F系统控制块
0xE000EF00 - 0xE000EF03NVIC

NVIC寄存器

地址寄存器名称说明
0xE000E100ISER中断使能寄存器
0xE000E180ICER中断失能寄存器
0xE000E200ISPR中断挂起寄存器
0xE000E280ICPR清除挂起中断的寄存器
0xE000E400 - 0xE000E41CIPR0-7中断优先级配置寄存器

系统控制块SCB寄存器

地址寄存器名称说明
0xE000ED00CPUIDCPUID
0xE000ED04ICSR中断控制和状态寄存器
0xE000ED0CAIRCR应用中断和复位的寄存器
0xE000ED10SCR系统控制寄存器
0xE000ED14CCR配置控制寄存器
0xE000ED1CSHPR2System Handler Priority Register 2
0xE000ED20SHPR3System Handler Priority Register 3

SysTick寄存器

地址寄存器名称说明
0xE000E010SYST_CSRSysTick控制和状态寄存器
0xE000E014SYST_RVRSysTick重载寄存器
0xE000E018SYST_CVRSysTick当前值寄存器
0xE000E01CSYST_CALIBSysTick校准寄存器

cortex-m0启动流程

  1. 程序从0x00000000地址开始执行
  2. m0从程序bin文件的开始处第2个word运行reset_handler
  3. reset_handler函数开始执行一些必要的初始化(ramfunc函数复制,堆初始化,全局、静态变量初始化等)
  4. 跳转到main函数中

中断向量表

sp指针
resetHandler地址
NMIHandler地址
hardfault地址
reserved
systickHandler地址
......

大小端

m0支持大端模式和小端模式,不过一般芯片公司选择小端模式。

堆栈

堆向上增长
栈向下增长

压栈的寄存器

xPSR
PC
LR
R12
R3
R2
R1
R0

杂项指令集

指令说明
BKPT断点
CPSID关闭总中断
CPSIE打开总中断
DMB数据存储器隔离 仅当所有在它前面的存储器访问操作都执行完毕后,才开始后面的存储器访问操作
DSB数据同步隔离,比DMB更严格:仅当所有在它前面的存储器访问操作都执行完毕后,才开始后面的指令
ISB指令同步隔离,最严格: 会清洗流水线,保证所有它前面的指令都执行完毕之后,才执行后面的指令。
MRS从特殊寄存器读取数据到通用寄存器
MSR从通用寄存器读取数据到特殊寄存器
NOP空转指令
SEV产生event
SVC产生SVC系统调用中断
WFE等待event
WFI等待中断

M0/M3/M4/M7区别

M0 armv6-M架构

M3 armv7-M架构
多了basepri寄存器可以阻止某优先级或更低的优先级的中断。
faultmask寄存器提供了更多的错误管理特性。
CONTROL寄存器的bit0用于决定是特权模式还是用户线程模式
32为thumb指令
位段特性
位域处理
多处理器支持
最多240个中断
硬件除法
存储器保护单元
更多的调试和跟踪特性

M4 armv7-M架构
浮点特性
SIMD指令(单周期多指令)
饱和算法
单周期MAC(MAC乘法累加)

特性M0M3M4M7
basepr

M3系统框图

请添加图片描述

M3快速开关中断汇编指令

指令效果说明
CPSID IPRIMASK=1关中断
CPSIE IPRIMASK=0开中断
CPSID FFAULTMASK=1关异常
CPSIE FFAULTMASK=0开异常

M3内核CONTROL寄存器

  • CONTROL[1]
    堆栈指针选择
    0=选择主堆栈指针 MSP(复位后缺省值)
    1=选择进程堆栈指针 PSP
    在线程或基础级(没有在响应异常——译注),可以使用 PSP。在 handler 模式下,只允许使用 MSP,所以此时不得往该位写 1。
  • CONTROL[0]
    0=特权级的线程模式
    1=用户级的线程模式
    Handler 模式永远都是特权级的。

异常和中断

Cortex‐M3 支持大量异常,包括 16‐4‐1=11 个系统异常,和最多 240 个外部中断——简称 IRQ。

编号类型优先级简介
0N/AN/A没有异常在运行
1复位-3(最高)复位
2NMI-2不可屏蔽中断(来自外部 NMI 输入脚)
3硬(hard) fault-1所有被除能的 fault,都将“上访”成硬 fault。除能的原因包括当前被禁用,或者 FAULTMASK 被置位。
4MemManage可编程fault
5存储器管理fault可编程MPU 访问犯规以及访问非法位置均可引发。企图在“非执行区”取指也会引发此 fault总线 fault从总线系统收到了错误响应,原因可以是预取流产(Abort)或数据流产,或者企图访问协处理器
6用法(usage)可编程Fault
7-10保留N/AN/A
11SVCall可编程执行系统服务调用指令(SVC)引发的异常
12调试监视器可编程调试监视器(断点,数据观察点,或者是外部调试请求
13保留N/AN/A
14PendSV可编程为系统设备而设的“可悬挂请求”(pendable request)
15SysTick可编程系统滴答定时器(也就是周期性溢出的时基定时器——译注)
16IRQ#0可编程
17IRQ#1可编程
255IRQ#239可编程

MPU存储器保护单元

Cortex‐M3 有一个可选的存储器保护单元。配上它之后,就可以对特权级访问和用户级访问分别施加不同的访问限制。当检测到犯规(violated)时,MPU 就会产生一个 fault 异常,可以由 fault异常的服务例程来分析该错误,并且在可能时改正它。MPU 有很多玩法。最常见的就是由操作系统使用 MPU,以使特权级代码的数据,包括操作系统本身的数据不被其它用户程序弄坏。MPU 在保护内存时是按区管理的(“区”的原文是 region,以后不再中译此名词——译注)。它可以把某些内存 region 设置成只读,从而避免了那里的内容意外被更改;还可以在多任务系统中把不同任务之间的数据区隔离。一句话,它会使嵌入式系统变得更加健壮,更加可靠(很多行业标准,尤其是航空的,就规定了必须使用 MPU 来行使保护职能——译注)。

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

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

相关文章

如何用 Cargo 管理 Rust 工程系列 丁

以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/PP9b5cSNd-7IqgNovcrB0A 优化输出 前面已经对 cargo package 工程编译输出了好多遍,发现编译结果打印的信息都包含了这个 unoptimize…

黑马React:基础拓展

黑马React: D10-基础拓展 Date: December 18, 2023 useReducer 基础使用 作用: 让 React 管理多个相对关联的状态数据 补充:和useState的作用类似,用来管理相对复杂的状态数据 **特点:**useReducer返回值为一个数组, 可以解构处数值stat…

C++共享和保护——(4)保护共享数据

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 一滴汗珠万粒粮,万粒汗珠谷…

【04】GeoScene导出海图或者电子航道图000数据成果

1创建一个带有覆盖面和定义的产品 如果你没有已存在的S-57数据,你可以通过捕捉新的产品覆盖范围(多边形产品范围)及其所需的产品定义信息(产品元数据)来为新产品创建基础。 注: 如果你已经有一个S-57数据…

【NI-RIO入门】使用LabVIEW进行数据采集测量

于ni kb摘录 选择合适的编程模式 CompactRIO系统具有至少两个用户可选模式。某些CompactRIO型号具有附加的用户可选模式,可以在实时NI-DAQmx中进行编程。请参考本文以判断您的CompactRIO是否能够使用实时NI-DAQmx。将目标添加到项目后,将提示您选择要使…

wvp-GB28181-pro 2.0+ZLMediaKit 使用Dockerfile制作镜像以及部署【CentOS7】

说明 部署gb28181和zlm主要需要构建两个镜像,第一个为基础镜像,以centos7为基础构建新的基础镜像base.Dockerfile,第二个镜像为服务部署镜像server.Dockerfile,以第一个镜像base.Dockerfile构建出的镜像为基础镜像进行构建 整个基础镜像的构…

Python项目——表白照片墙

1、介绍 利用女神的照片,组成女神的名字,向女神表白。如下图: 原理:获取每个像素点的颜色,白色不贴图,黑色贴图。 2、工具 语言:python3.11编译器:PyCharm包:pygame p…

2024年【陕西省安全员C证】考试及陕西省安全员C证模拟试题

题库来源:安全生产模拟考试一点通公众号小程序 陕西省安全员C证考试是安全生产模拟考试一点通总题库中生成的一套陕西省安全员C证模拟试题,安全生产模拟考试一点通上陕西省安全员C证作业手机同步练习。2024年【陕西省安全员C证】考试及陕西省安全员C证模…

竞赛保研 python+opencv+深度学习实现二维码识别

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 pythonopencv深度学习实现二维码识别 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:3分 该项目较为新颖&…

JWT令牌的作用和生成

JWT令牌(JSON Web Token)是一种用于身份验证和授权的安全令牌。它由三部分组成:头部、载荷和签名。 JWT令牌的作用如下: 身份验证:JWT令牌可以验证用户身份。当用户登录后,服务器会生成一个JWT令牌并返回…

hping3

Hping3 Hping3的介绍: 是一款网络的测试工具,一般用于网络安全员用来进行防火墙的测试等抗压测试。 Hping3的帮助面板: -h –help显示帮助 -v –version显示版本信息 -c –count 限制发包数 -i –interval nterval 指定发包间隔为多少毫秒&#…

一封来自北京软协的感谢信

日前,北京软件和信息服务业协会(以下简称北软协)向酷雷曼(北京同创蓝天云科技有限公司)发来感谢信,以表彰和感谢同创蓝天对北软协及行业的全方位支持和卓越贡献。 作为北软协理事会会员单位,酷雷…

js 高阶(含vue.js)

1、主动触发函数 this.$options.watch.watchOrdersFormPrice.apply(this);//主动触发watchOrdersFormPrice watch:{watchOrdersFormPrice: function(){if( !this.ordersForm.alone_sold_price && this.ordersForm.ginfo.goods_id ){var price_info this.ordersForm.…

汽车销售技巧培训应该学习哪些内容

汽车销售技巧培训应该学习哪些内容 随着汽车市场的竞争日益激烈,汽车销售技巧培训对于提高销售人员的销售能力和服务水平至关重要。本文将介绍汽车销售技巧培训应该学习哪些内容,并结合案例进行分析。 一、产品知识 作为销售人员,了解所销售…

Java 图片文件上传下载处理

Java 图片文件上传下载处理 下载 做这玩意给我恶心坏了 下载 直接访问上传的路径就可以下载图片了。但是我们往往会包一层接口,以流的方式读取 url 的内容然后返回给前端,这么做的优点是: 内网域名转外网域名,做业务校验并且让用…

后端相关随机题目记录(1)

目录 后端相关随机题目记录(1) 后端相关随机题目记录(1)Bean的类型以及作用域Bean的生命周期Mysql的底层数据结构RedisHttp和Https区别AOP在项目的应用 自定义注解?请求在spring中的一个流程Nacos与zk的区别SpringMV…

Unity中URP下的菲涅尔效果实现(个性化修改)

文章目录 前言一、我们修正一下上篇文章中,可能遗留的Bug1、N向量 变为 单位向量2、使颜色范围在合理区间 二、实现菲涅尔效果强弱可自定义调节三、修改菲涅尔效果颜色1、在属性面板定义颜色属性2、在常量缓冲区申明该参数3、在片元着色器中,用颜色和菲涅…

Python---进程

1. 进程的介绍 在Python程序中,想要实现多任务可以使用进程来完成,进程是实现多任务的一种方式。 2. 进程的概念 一个正在运行的程序或者软件就是一个进程,它是操作系统进行资源分配的基本单位,也就是说每启动一个进程&#xf…

QT for Android安卓编译环境搭建+首次编译3个大坑

1、安装 编译环境能否搭建成功,主要是看各个依赖软件的版本是否匹配。依赖的软件有3个:JDK、安卓SDK、安卓NDK。 我的qt版本是5.14.1,我亲测以下版本可以成功让编译安卓: QT5.14 JDK1.8.0 安卓SDK26.1 安卓NDK20.1 在QT-&g…

LeetCode 142. 环形链表 II

给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整…