【ARMv7-M】| 01——阅读笔记 | 简介|应用程序级编程和内存模型

2024-04-08 10:20

本文主要是介绍【ARMv7-M】| 01——阅读笔记 | 简介|应用程序级编程和内存模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

系列文章目录
【ARMv7-M】| 01——阅读笔记 | 简介|应用程序级编程和内存模型


失败了也挺可爱,成功了就超帅。

文章目录

  • 前言
  • 1、简介
  • 2、应用程序级编程模型
    • 2.1 编程模式和访问等级
    • 2.2 数据类型和运算操作
    • 2.3 寄存器和执行状态
    • 1.2.4 异常和中断
    • 1.2.5 浮点单元寄存器
  • 3、内存模型
    • 3.1 地址空间
    • 3.2 对齐
    • 3.3 大小端
    • 3.4 同步和信号量

前言

本文为ARMv7-M参考手册的阅读笔记

1、简介

ARMv7架构根据不同应用场景和性能 分为三个分支 -A -R -M

ARMv7-A:用于高性能应用型SOC 支持ARM和Thumb指令集 内存管理单元使用 MMU 支持虚拟内存

ARMv7-R:用于实时性要求很高的SOC 支持ARM和Thumb指令集 内存管理单元使用 MPU支持内存保护

ARMv7-M:用于低成本低功耗性能够用的MCU 只支持Thumb指令集(Thumb-2) 如扩展浮点运算单元的MCU 会在此基础上加入浮点指令

ARMv7-M架构支持两种扩展功能:DSP和FP浮点指令
DSP扩展:包含 饱和指令及SIMD指令(单指令多数据)
FP扩展:可选单精度和双精度
基于Cortex-M4带FPU的MCU 支持DSP和FP单精度

2、应用程序级编程模型

2.1 编程模式和访问等级

两种:处理模式和线程模式

程序正常运行在线程模式 执行异常中断时会处于处理模式

程序运行又分为两种访问权限:特权访问和非特权访问

特权:所有资源都可以控制 非特权:有限制

线程模式可以通过程序控制处于特权/非特权运行 处理模式总是特权模式

2.2 数据类型和运算操作

该架构中 支持 字节、半字、字类型的数据。

当加载字节、半字大小的指令时可以通过加载指令指定零/符号扩展

可以对64位整数数据直接操作 一般情况通过两个指令合并它们。

指令集提供了对寄存器中值的一些操作指令:按位逻辑与或非、移位、加减乘 和我们编程语言中支持的运算操作符类似 只不过使用方式不同

使用方式如下:使用内置函数/ARM指令(ARM汇编)

LSL逻辑左移: 将一个寄存器中的值进行逻辑左移

eg:LSL R1, R2, #3  将R2寄存器中的值逻辑左移3位 写入R1中

LSR逻辑右移:将一个寄存器中的值进行逻辑右移

eg:LSR R1, R2, #3  将R2寄存器中的值逻辑右移3位 写入R1中

ASR算术右移:将一个寄存器中的值进行算术右移

eg:ASR R1, R2, #3  将R2寄存器中的值算术右移3位 写入R1中

ROR循环右移:指令把所有位都向右移,最低位复制到进位标志位和最高位

eg:ROR R1, R2, #3  将R2寄存器中的值循环右移3位 写入R1中

RRX循环右移:对寄存器中的内容进行带扩展的循环右移的操作。是一种协处理器指令。按操作数所指定的位数向右循环移位,左端用进位标志位C来填充。其中,操作数可以是寄存器,也可以是立即数(0~31)。例如,MOV R0,R1,RRX#2;将R1中的内容进行带扩展的循环右移两位后传送到R0中。

2.3 寄存器和执行状态

一共有16个32位寄存器 其中13个通用寄存器(R0-R12) 和 3个特殊功能寄存器(SP/LR/PC)

SP:R13 堆栈指针 指向栈顶

LR:R14 链接寄存器 存储程序返回地址

PC:R15 程序计数器 程序执行向地址

程序执行状态寄存器 APSR 32位
在这里插入图片描述

1.2.4 异常和中断

中断是异常的一种 可以由异常/中断行为触发 也可通过软件触发

系统异常如 SVC/PendSV systick等

它们的控制都用 中断控制状态寄存器 ICSR决定 后面章节详解

1.2.5 浮点单元寄存器

只有支持该扩展的MCU才有 Cortexm4带FPU的会有

32个单精度寄存器 S0-S31 两两一组 16个双精度寄存器 D0-D15

更多关于浮点扩展先不看了

3、内存模型

3.1 地址空间

后面章节详解

3.2 对齐

支持非对齐访问
非对齐指令
在这里插入图片描述

3.3 大小端

支持大端和小端 默认小端
通过SCB系统控制寄存器 可以修改

加载寄存器数据/存储数据到寄存器的指令
在这里插入图片描述
对通用寄存器翻转字节的指令
在这里插入图片描述

3.4 同步和信号量

在多线程运行下 信号量同步操作时我们常见的 线程间通信的方式
排他访问 指令具有原子操作 很好的满足了信号量的实现
在这里插入图片描述

这篇关于【ARMv7-M】| 01——阅读笔记 | 简介|应用程序级编程和内存模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

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的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

Golang基于内存的键值存储缓存库go-cache

《Golang基于内存的键值存储缓存库go-cache》go-cache是一个内存中的key:valuestore/cache库,适用于单机应用程序,本文主要介绍了Golang基于内存的键值存储缓存库... 目录文档安装方法示例1示例2使用注意点优点缺点go-cache 和 Redis 缓存对比1)功能特性

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

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

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

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

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

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内