【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 同步和信号量

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

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

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

相关文章

java继承再学习以及今日题目总结

1.继承的定义 java中提供了一个继承的关键字extends,用这个关键字可以让一个类与另一个类存在继承关系,其中继承的类为子类,被继承的类为父类 继承的使用范围: 当类与类之间有相同的内容,并且满足子类是父类的一种 …

让chatGPT控制物理设备

作为自动控制行业的工程师,我们也许最关心的是如何使chatGPT 控制物理设备。我发现许多人仍然停留在传统程序设计的思维阶段,比如让大模型编写一段PLC 代码,或者是生成一些信息模型。 其实大模型具备判断与思考的能力,AI …

软件设计师:11-结构化开发与UML

结构化开发(3-4分) 一、模块化 二、耦合(背) 三、内聚(背) 四、设计原则(背) 五、系统文档 六、数据流图 数据流的起点或终点必须有一个是加工 判断依据: 1、…

模块十一 面向对象

回顾与重点 模块十回顾 继承:子类继承父类,可以直接使用父类中非私有成员,子类不用写重复性代码 关键字:extends 成员访问特点: a. 成员变量:看等号左边是谁 b. 成员方法:看new的是谁 方法的…

力扣 583. 两个字符串的删除操作

题目来源:https://leetcode.cn/problems/delete-operation-for-two-strings/description/ C题解1:动态规划 寻找word1和word2拥有的公共最长子序列,之后分别对word1和word2进行删除操作,即可使word1和word2相等。 寻找公共最长子…

B02、执行引擎-5

1、前言 1.1、什么是机器码 各种用二进制编码方式表示的指令,叫做机器指令码。开始,人们就用它采编写程序,这就是机器语言。机器语言虽然能够被计算机理解和接受,但和人们的语言差别太大,不易被人们理解和记忆&#x…

腾讯云4核8G服务器12M带宽646元1年零3个月,4C8G使用场景说明

腾讯云4核8G服务器多少钱?腾讯云4核8G轻量应用服务器12M带宽租用价格646元15个月,活动页面 txybk.com/go/txy 活动链接打开如下图所示: 腾讯云4核8G服务器优惠价格 这台4核8G服务器是轻量应用服务器,详细配置为:轻量4核…

Java学习笔记23(面向对象三大特征)

1.5 多态 ​ *多态(polymorphic) ​ *方法或对象具有多种形态,是面向对象的第三大特征,多态是建立在封装和继承基础之上的 1.多态的具体体现 1.方法的多态 (重写和重载体现了多态) 2.对象的多态 ​ 1.一个对象的编译类型和…

工业视觉检测

目录 我对工业视觉检测的了解 一、关键组成部分 二、应用场景 三、技术挑战 我对工业视觉检测的了解 工业视觉检测是利用机器视觉技术对产品质量进行自动化检查的过程,它在制造业中扮演着至关重要的角色,用于确保产品质量、提高生产效率、减少人工成…

书生浦语训练营二期第三次作业

文章目录 基础作业1. 在茴香豆 Web 版中创建自己领域的知识问答助手第一轮对话第二轮对话第三轮对话第四轮对话第五轮对话 2.在 InternLM Studio 上部署茴香豆技术助手修改配置文件创建知识库运行茴香豆知识助手 基础作业 1. 在茴香豆 Web 版中创建自己领域的知识问答助手 我…

多线程学习-等待唤醒机制

目录 1.普通生产者与消费者方式 2.加入阻塞队列 等待唤醒机制即通过wait和notify实现多线程之间的通信,进而实现多线程协同工作。 1.普通生产者与消费者方式 生产者和消费者是一种经典的多线程协同工作模式,以厨师(生产者)和顾…

Linux中shell脚本的学习第一天,编写脚本的规范,脚本注释、变量,特殊变量的使用等,包含面试题

4月7日没参加体侧的我自学shell的第一天 Shebang 计算机程序中,shebang指的是出现在文本文件的第一行前两个字符 #! 1)以#!/bin/sh 开头的文件,程序在执行的时候会调用/bin/sh, 也就是bash解释器 2)以#!/usr/bin/python 开头的文件&#…