1909_Arm Cortex-M3编程模型

2024-03-07 10:04
文章标签 模型 编程 arm cortex 1909 m3

本文主要是介绍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之外,其他的异常的优先级都是可以配置的。

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

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

这篇关于1909_Arm Cortex-M3编程模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/783150

相关文章

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll