前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >arm(1)| 基础知识

arm(1)| 基础知识

作者头像
飞哥
发布2020-07-10 10:26:34
5900
发布2020-07-10 10:26:34
举报

今天来介绍一下arm裸机部分的知识。这些主要是一些关于arm内核的基础知识,理解这些,对后面的编程非常有帮助。

一、交叉编译

所谓交叉编译可以理解为在一类机器上编写(源代码)、编译得到可执行程序(通常是PC机),在另一类机器上运行(比如arm设备),这是嵌入式和非嵌入式的一个很大的区别。之所以用交叉编译,是因为

(1)嵌入式开发的CPU比较简单,本身无法搭建开发环境,有些甚至操作系统都没有。

(2)交叉编译可以用高性能机器为低性能机器开发软件(包括裸机软件、系统级和应用级软件)。

由于可执行程序不能本地运行调试,因此必须配合一定手段(专用调试器、JTAG调试器、USB下载、串口下载、SD启动、网络共享等)将可执行程序加载到目标嵌入式设备上运行及调试。

二、arm处理器的七种工作模式

ARM 有7个基本工作模式:

User : 非特权模式,大部分任务执行在这种模式

FIQ :当一个高优先级(fast) 中断产生时将会进入这种模式

IRQ :当一个低优先级(normal) 中断产生时将会进入这种模式

Supervisor :当复位或软中断指令执行时将会进入这种模式

Abort:当存取异常时将会进入这种模式

Undef:当执行未定义指令时会进入这种模式

System:使用和User模式相同寄存器集的特权模式

注意:

(1)除User(用户模式)是Normal(普通模式)外,其他6种都是Privilege(特权模式)。

(2)Privilege中除Sys模式外,其余5种为异常模式。

(3)各种模式的切换,可以是程序员通过代码主动切换(通过写CPSR寄存器),也可以是CPU在某些情况下自动切换。

(4)各种模式下权限和可以访问的寄存器不同。

三、arm的37个通用寄存器

注意:System模式使用user模式寄存器集

其中的CPSR是程序状态寄存器,只有1个,SPSR用来保存模式切换时CPSR的值,有5个。PC(Program control register)为程序指针,PC指向哪里,CPU就会执行哪条指令(所以程序跳转时就是把目标地址代码放到PC中)整个CPU中只有一个PC。

注意:

1、ARM总共有37个寄存器,但是每种模式下最多只能看到18个寄存器,其他寄存器虽然名字相同但是在当前模式不可见。

2、对r13这个名字来说,在ARM中共有6个名叫r13(又叫sp)的寄存器,但是在每种特定处理器模式下,只有一个r13是当前可见的,其他的r13必须切换到他的对应模式下才能看到。这种设计叫影子寄存器(banked register)

四、ARM的异常处理方式

异常向量表:所有的CPU都有异常向量表,这是CPU设计时就设定好的,是硬件决定的。当异常发生时,CPU会自动动作(PC跳转到异常向量处处理异常,有时伴有一些辅助动作)异常向量表是硬件向软件提供的处理异常的支持。

以上说的是CPU设计时提供的异常向量表,一般称为一级向量表。有些CPU为了支持多个中断,还会提供二级中断向量表,处理思路类似于这里说的一级中断向量表。比如发生中断时,程序跳转到IRQ异常向量表处,然后从这个一级向量表再跳转到二级中断向量表(因为中断不止一种,必须由向量表来确定不同的中断跳向不同的地方)。

五、内存与外存

存储是一个大话题,很多人在学单片机时就没有好好研究各种存储器之间关系是怎么样的。

内存就是内部存储器,是用来运行程序的RAM,举例(DRAM SRAM DDR)。外存就是外部存储器是用来存储东西的ROM,举例(硬盘 Flash(Nand、iNand、U盘、SSD) 光盘)。

CPU连接内存和外存的连接方式不同。内存需要直接地址访问,所以是通过地址总线&数据总线的总线式访问方式连接的(好处是直接访问,随机访问;坏处是占用CPU的地址空间,大小受限);外存是通过CPU的外存接口来连接的(好处是不占用CPU的地址空间,坏处是访问速度没有总线式快,访问时序较复杂)。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子技术研习社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档