嵌入式硬件的学习----ARM

目录

ARM

ARM体系结构

精简指令集架构cpu

CISC&RISC

☆ARM寄存器

通用寄存器

R0-R12

PC寄存器(R15)

lr寄存器(R14)

SP寄存器(R13)

ALU寄存器

CPSR寄存器

SPSR寄存器

MMU(不是寄存器)

Cache高速数据缓存(哈佛架构)

icache

dcache

冯诺依曼架构&哈佛架构

单总线

双总线

AHB总线

APB总线

交叉编译

flash(ROM闪存)

[☆nor flash](#☆nor flash)

[☆nand flash](#☆nand flash)

memory(RAM内存)

三级存储结构

存储器的层次结构

计算机的组成

处理器的工作模式(很重要)

程序状态寄存器

☆异常处理流程

汇编语言

mov指令

add指令

sub指令

ldr指令

str指令

bic指令

orr指令

b跳转指令

[☆b & bl & bx](#☆b & bl & bx)

mvn指令

mrs指令

msr指令

☆立即数的判断

练习

1.两数相加

2.三个数找出最大值

3.用b指令进行两数找出最大值

4.用b指令三个数找出最大值

[5.用b指令1-100求和 和 do while](#5.用b指令1-100求和 和 do while)

[6.用b指令1-100求和 while](#6.用b指令1-100求和 while)

7.函数调用

☆栈的分类

ARM内核中使用的是满减栈

☆汇编调用c语言传参时:

模式的切换(从SVC转换到user模式)


ARM

ARM体系结构

精简指令集架构cpu

cpu内核:CISC、RISC

CISC&RISC

CISC:复杂指令集合计算机

  • 芯片面积大,加工成本高,复杂,体积大,功耗大,28效益(80%情况下用到20%功能)

RISC:精简指令集合计算机

  • 芯片面积小,加工成本低,体积小,功耗小(便携式设备)

ARM设计内核,半导体厂商生产芯片

☆ARM寄存器

通用寄存器
R0-R12

存放数据,没有地址

PC寄存器(R15)

程序计数器,本质是一个指针,指向当前代码正在执行的指令的下一条指令

lr寄存器(R14)

链接寄存器,保存函数的1个返回地址

SP寄存器(R13)

栈指针寄存器,用来管理栈区,指向栈顶

ALU寄存器

算术逻辑单元

CPSR寄存器

当前程序寄存器,保存程序运行到某一步的状态

SPSR寄存器

备份、保存程序状态,保存当异常发生时,CPSR程序中的一些状态

MMU(不是寄存器)

内存管理单元,虚拟内存,用于管理虚拟内存到物理内存的映射,从而提高物理内存的利用率

注:裸机必须关闭MMU;衡量一款芯片是否适合跑Linux(驱动)系统就是看这个芯片是否有MMU

Cache高速数据缓存(哈佛架构)

icache

指令缓存,存放指令

dcache

数据缓存,存放数据

冯诺依曼架构&哈佛架构

冯诺依曼架构:数据和指令存放到同一块内存空间

哈佛架构:数据和指令要单独存储

注意:裸机需要打开icache,关闭dcache

单总线

通过一根线/一组线与外设通信,和某个外设通信时,其他外设无法连接

双总线

AHB总线

先进高速总线(RAM,USB,网卡),接通信速率快的外设

APB总线

先进外设总线(GPIO,UART),接通信速率慢的外设

交叉编译

在一个平台上编写编译程序,能够在另一个平台运行程序

flash(ROM闪存)

☆nor flash

可以被寻址,每一个字节都可以被寻址

地址总线可以寻址

☆nand flash

无法被寻址,以固定块大小(512字节)写入或读取数据

memory(RAM内存)

三级存储结构

存储器的层次结构

计算机的组成

控制器、运算器、输入、输出、存储器

arm指令集:32bit

thumb指令集:16bit

处理器的工作模式(很重要)

程序状态寄存器

☆异常处理流程

汇编语言

mov指令

add指令

sub指令

ldr指令

1.向寄存器中加载一个非立即数

2.将RAM中的数据加载到寄存器中

str指令

将寄存器的数据写入指定的RAM中

bic指令

用于清0,将寄存器中的值某几位清0

orr指令

用于置1,将寄存器中的值某几位置1

b跳转指令

下面,这个指令相当于c语言中的while(1){}

☆b & bl & bx
  • b指令在函数调用时,不会把返回地址保存到 lr 寄存器中
  • bl指令在函数调用时,会把返回地址保存到 lr 寄存器中
  • bx指令在函数调用时,相当于mov pc,lr,bx跳转到lr寄存器对应返回地址

mvn指令

按位取反

mvn r0,#0 和mov r0,#0xFFFFFFFF 得到的结果是相同的

mrs指令

读取某个特殊寄存器的值到通用寄存器

msr指令

将某个通用寄存器的值写入某个特殊寄存器

☆立即数的判断

1、这个数在0-0xFF之间

2、把这个数字转换为二进制,这个数的最高位1到最低位1之间的二进制序列位数不能超过8位

3、这个数的二进制序列凑够8位之后的右边必须为偶数个0

练习

1.两数相加
2.三个数找出最大值
3.用b指令进行两数找出最大值
4.用b指令三个数找出最大值
5.用b指令1-100求和 和 do while
6.用b指令1-100求和 while
7.函数调用

☆栈的分类

  • 空增栈
  • 空减栈
  • 满增栈
  • 满减栈

增栈:入栈时,sp指针向上移动

减栈:入栈时,ap指针向下移动

空栈:先写数据,再挪动指针

满栈:先挪动指针,再写数据

满减栈: *--sp,先让sp--,再写数据

调用之前要进行入栈保护

ARM内核中使用的是满减栈

☆汇编调用c语言传参时:

  • 如果传的参数<=4个,可以通过通用寄存器r0-r3来进行传参
  • 如果传的参数>4个,必须通过栈来进行传参,保护现场(入栈保护)、恢复现场(出栈恢复)
  • c语言函数返回的结果保存到R0寄存器中

模式的切换(从SVC转换到user模式)

  1. 将cpsr寄存器中的值读到通用寄存器中R0

  2. 将R0寄存器中低5位的值先清0 (bic)

  3. 将R0寄存器中的低5位置设置为:10000 (orr)

  4. 将R0寄存器中的值回写到CPSR寄存器

相关推荐
爱就是恒久忍耐6 小时前
CanFestival移植到STM32 F103芯片(基于HAL库)
stm32·单片机·嵌入式硬件
txh05076 小时前
如何使用示波器
嵌入式硬件·硬件工程
minglie17 小时前
蚂蚁S9矿板PS 内核定时器驱动
学习
你想知道什么?7 小时前
决策树-学习笔记
笔记·学习·决策树
MartinYeung57 小时前
[论文学习]WASP:面向提示注入攻击的Web代理安全性基准测试
前端·网络·学习
LCG元8 小时前
STM32 多总线传感器采集系统:I2C + SPI + ADC + UART 协同实战(FreeRTOS 调度)
stm32·单片机·嵌入式硬件
懒狗跑ai的程序员Brain8 小时前
如何利用粒子系统在unity制作一个烟花(粒子系统学习向)
学习·unity·游戏引擎
念何架构之路8 小时前
moby-BuildKit(builder-next)
学习·docker·容器
hongmai6668888 小时前
ESP32-C5-WROOM-1-N16R8:双频Wi-Fi 6与多协议融合,重新定义物联网连接新标准
笔记·嵌入式硬件·物联网·智能路由器·risc-v
惠惠软件8 小时前
快速生成磁盘目录文件-双击运行a.bat ,可以看到磁盘目录下出现了 文件目录.txt-供大家学习研究参考
windows·学习·文件列表