ARM学习笔记(1)

今天把ARM入门的知识点梳理了一遍,核心内容记下来。

一、CPU架构分类

主要分CISC和RISC两类:

CISC(复杂指令集):代表x86。指令功能多,芯片设计复杂,成本高、体积大、功耗也大。

RISC(精简指令集):代表ARM、MIPS、8051。指令精简,芯片结构简单,成本低、体积小、功耗低。

ARM本身只做RISC架构设计,不生产芯片,通过授权给半导体公司落地。比如STM32F103就是意法半导体基于ARM架构做的MCU。

二、ARM内核产品线

ARM内核分三大方向,覆盖不同场景:

Cortex-A:应用级,跑操作系统的场景,比如手机、平板。代表有Cortex-A5、A7、A8、A9,像IMX6ULL、STM32MP157用的就是Cortex-A7。

Cortex-R:实时领域,主打高实时性,典型如汽车电子。

Cortex-M:单片机MCU领域,做控制类开发。Cortex-M3对应STM32F103,Cortex-M4对应STM32F407。

对应的指令集版本,常见的有armv7和armv8两代。

三、核心寄存器

ARM内核有16个通用寄存器,几个关键寄存器必须理清:

PC(R15):程序计数器,本质是指针,指向当前正在执行指令的下一条指令。

LR(R14):链接寄存器,保存函数的返回地址。

SP(R13):栈指针,管理栈区空间。栈是先进后出结构,出栈时从SP指向的位置取出数据,然后SP自增。

CPSR:程序状态寄存器,保存当前程序状态。异常发生时,会把CPSR备份到SPSR里,异常返回时再恢复。

还有MMU内存管理单元,作用是把程序的虚拟地址转换成物理地址。裸机开发一般关掉MMU,Linux驱动里会打开。每个进程能拥有4GB虚拟地址空间,就是靠MMU实现的。

四、内存与总线

大小端模式

大端:高地址存放低数据位,低地址存放高数据位

小端:高地址存放高数据位,低地址存放低数据位

总线架构

单总线:内核和外设之间通过一组总线通信

双总线/多总线:高速外设走AHB(先进高速总线),比如USB这类高速设备

存储介质

Nor Flash:支持字节级寻址,有独立的地址总线和数据总线,可以直接在上面运行程序

Nand Flash:块设备,按块读写,通常一块大小为512字节,容量大成本低

五、三种右移指令

汇编里常用的三种右移,区别很关键:

逻辑右移LSR:给无符号数用,最高位补0

算术右移ASR:给有符号数用,最高位补符号位

循环右移ROR:每次移出的最低位,直接补到最高位

对应汇编示例:

asm

MOV R0, #0xB2 ; 二进制 1011 0010

LSR R1, R0, #1 ; 逻辑右移1位 → 0101 1001

ASR R2, R0, #1 ; 算术右移1位 → 1101 1001

ROR R3, R0, #1 ; 循环右移1位 → 0101 1001

六、其他基础概念

交叉编译:在一个平台上编写编译程序,放到另一个平台上运行。比如在PC上编译ARM程序,下载到开发板里跑。

中断向量表:本质是数组,里面存放每个中断服务函数的入口地址。

异常向量表:同理,数组里存放跳转到异常处理函数的指令。

冯·诺依曼架构:数据和指令共享同一块存储空间。

都是入门必须吃透的基础概念,先整理到这。

相关推荐
东风微鸣几秒前
精简 Ubuntu Linux 固件包:每个 N100 节点省下约 450 MB
linux·ubuntu·postgresql
尼喃1 分钟前
PW5100-50和PW5150:1.5V转5V芯片有什么区别?
嵌入式硬件
snhna2 分钟前
Agent 上云部署实战(上):从 GitHub 到 Linux,用 Dify 跑通中间件、域名和 HTTPS
linux·中间件
m4Rk_11 分钟前
【论文阅读】Agent 记忆机制(97):MCMA——让 Agent 学会如何抽象记忆,实现跨任务经验迁移
论文阅读·人工智能·学习·开源·github
晓德14 分钟前
7、LLM 模型是怎么训练生成的?(4)指令微调
人工智能·学习·算法·信息安全
ljt272496066115 分钟前
Vue笔记(十三)--mixin
vue.js·笔记
问天_观心19 分钟前
Mistral-7B QLoRA 实战(二):官方权重转换、4-bit NF4 加载与 Base Model 基线测试
人工智能·深度学习·学习·大模型·transformer
启观川27 分钟前
数据结构与算法 -第 3 章 常用算法-回溯算法
数据结构·笔记·python·算法
andrsted27 分钟前
练题簿在线免费刷题:选择、填空、简答与排序,多种题型练出不同的掌握程度
学习·微信小程序·小程序·学习方法·刷题
jaronho35 分钟前
【脚本】 【Linux】启动所有网卡
linux·运维·服务器