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

相关文章

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

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

DeepSeek模型本地部署的详细教程

《DeepSeek模型本地部署的详细教程》DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,在本地成功部署DeepSe... 目录一、环境准备(一)硬件需求(二)软件依赖二、安装Ollama三、下载并部署DeepSeek模型选

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe