arm处理器

Compile a native C Android application

妖精的绣舞 提交于 2019-12-18 23:54:37
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> http://www.cnblogs.com/GoAhead/p/4186707.html 通过上网搜索,你可以发现很多种编译Android native应用的方法.我想说的是,不同的控制台应用, 守护程序(daemon), C/C++库,等等.这些程序在你自己的计算机上 编译没有任何问题. 为了给Android编译程序,你需要ARM工具链(toolchain). 我发现有两种主张,分别是使用Android Prebuild toolchain和CodeSourcery 1)Android Prebuild toolchain Android没有使用传统的libc库.相反,它用了Bionic库,一个由Google开发的,用在Android移动软件平台上的轻量级的libc Bionic被裁剪到只支持 Android系统.  请看 六百万美元的c程序库 2)CodeSourcery CodeSourcery是ARM的合作伙伴. 专门为ARM处理器开发增强GUN工具链的,并提供验证过的GNU工具链.这些工具链有很多不同的版本. 对于Android平台,需要 arm-none-linux-gnueabi, 而 arm-none-eabi是没有glibc包含在里面的,主要面向那些编译完整的native库和应用

ARM装配说明MCR/MRC学习

走远了吗. 提交于 2019-12-18 13:50:36
MCR指令ARM数据寄存器传送到协处理器寄存器。假设协处理器不能成功运行操作。会产生未定义指令中止。 语法教学格式: MCR{<cond>} p15, 0, <Rd>, <CRn>, <CRm>{,<opcode_2>} MCR2 p15, 0, <Rd>, <CRn>, <CRm>{,<opcode_2>} 当中。<cond>为指令运行的条件码。当<cond>忽略时指令为无条件运行。MCR2中,<cond>为Ob1111,指令为无条件运行指令。 <opcode_1>为协处理器将运行的操作的操作码。 对于CP15协处理器来说, <opcode_1>永远为0b000,当<opcode_1>不为0b000时,该指令操作结果不可预知。 <Rd>作为元寄存器的ARM寄存器。其值被传送到得协处理器寄存器中。 <Rd>不能为PC。当其为PC时。指令操作结果不可预知。 <CRn>作为目标寄存器的协处理器寄存器,其编号可能为C0,C1....C15。 <CRm>附加的目标寄存器或者原操作数寄存器。用于区分同一个编号的不同物理寄存器。当指令中不须要提供附加信息时,将C0指定为<CRm>,否则指令操作结果不可预知。 <opcode_2>提供附加信息,用于差别同一个编号的不同物理寄存器。当指令中指定附加信息时,省略<opcode_2>或者将其指定为0,否则指令操作结果不可预知。

ARM异常及中断处理介绍(中断是异常的一种)

谁都会走 提交于 2019-12-18 02:27:03
中断 概念 :是一个过程,是CPU在执行当前程序的过程中因硬件或软件的原因插入了另一段程序运行的过程。因硬件原因引起的中断过程的出现时不可预测的,即随机的,而软中断是事先安排好的。 中断源 概念 :可以引起中断的信号源。 异常优先级 ARM处理器中有7种类型的异常,按优先级 从高到低 的排列如下: 复位异常 (Reset)、 数据异常 (Data Abort)、 快速中断异常 (FIQ)、 外部中断异常 (IRQ)、 预取异常 (Prefetch Abort)、 软中断异常 (SWI)、 未定义指令异常 (Undefined interrupt)。 优先级最低的两种异常是软件中断异常和未定义指令异常。因为正在执行的指令不可能既是一条软中断指令,又是一条未定义指令,所以软中断异常和未定义指令异常享有相同的优先级。 注意 在ARM处理器中(Exception)和中断(Interrupt)有些差别,异常主要是从处理器被动接受异常的角度出发,而中断带有向处理器主动申请的色彩。此文中对“异常”和“中断”不做严格区分;两者都是指请求处理器打断正常的程序执行流程,进入特定程序循环的一种机制。 异常 概念 :异常由内部或外部源产生并引起处理器处理一个事件。在处理异常之前,处理器状态必须保留,一遍在异常处理程序完成后,原来的程序能够重新执行。同一时刻可能出现多个异常。 注意 当异常出现时

ARM汇编指令

让人想犯罪 __ 提交于 2019-12-10 07:40:14
转载: arm汇编指令-Bingghost-博客园 学习嵌入式系统时的资料收集 ARM处理器的指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)处理指令、加载/存储指令、协处理器指令和异常产生指令6大指令 一、跳转指令 跳转指令用于实现程序流程的跳转 跳转指令分类 Ⅰ.使用专门的跳转指令 分支指令 B 带链接的分支指令: BL 带状态切换的分支指令 BX Ⅱ. 程序计数器PC控制 直接向程序计数器PC写入跳转地址值,通过向程序计数器PC写入跳转地址值 可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用MOV LR,PC等类似指令 可以保存将来的返回地址值,从而实现在4GB连续的线性地址空间的子程序调用。 ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间的跳转,包括以下4条指令: 1、B指令 B指令的格式为: B{条件} 目标地址 2、BL指令 BL指令的格式为: BL{条件} 目标地址 BL是另一个跳转指令,但跳转之前,会在寄存器R14中保存PC的当前内容, 因此,可以通过将R14的内容重新加载到PC中,来返回到跳转指令之后的那个 指令处执行。 该指令是实现子程序调用的一个基本但常用的手段 3、BLX指令 BLX指令的格式为: BLX 目标地址 BLX指令从ARM指令集跳转到指令中所指定的目标地址

关于ARM的PC指针(什么时候PC+8,PC+4,PC-4,PC-8)转

蓝咒 提交于 2019-12-06 04:28:37
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/lee244868149/article/details/49488575 要理解PC指针,首先就要好好了解LR指针 连接寄存器LR(r14):用来保存和恢复PC寄存器的内容,它有两个特殊功能。 (1)保存子程序返回地址。使用BL或BLX时,跳转指令自动把返回地址放入r14中;子程序通过把r14复制到PC来实现返回,通常用下列指令之一: MOV PC, LR BX LR 通常子程序这样写,保证了子程序中还可以调用子程序。 stmfd sp!, {lr} …… ldmfd sp!, {pc} (2)当异常发生时,异常模式的r14用来保存异常返回地址,将r14如栈可以处理嵌套中断。 程序计数器r15(PC):PC是有读写限制的。当没有超过读取限制的时候,读取的值是指令的地址加上8个字节,由于ARM指令总是以字对齐的,故bit[1:0]总是00。当用str或stm存储PC的时候,偏移量有可能是8或12等其它值。在V3及以下版本中,写入bit[1:0]的值将被忽略,而在V4及以上版本写入r15的bit[1:0]必须为00,否则后果不可预测。 知道PC寄存器和LR寄存器功能以后,再了解一下ARM处理器的三级流水线和多级流水线 首先

ARM的两种工作状态

。_饼干妹妹 提交于 2019-12-06 02:27:21
两种工作状态 1、ARM状态:32位,ARM状态执行字对齐的32位ARM指令。 2、Thumb状态,16位,执行半字对齐的16位指令。 3、用Bx Rn指令来进行两种状态的切换: 其中Bx是跳转指令,而Rn是寄存器(1个字,32位),如果Rn的位0为1,则进入Thumb状态;如果Rn的位为0,这进入ARM状态。(原 因:ARM指令的后两位始终为0,没有用,而Thumb指令的后一位始终为0,没有用,因此采用位0来表示ARM指令与Thumb指令的切换标志位。) 注:1、ARM和Thumb两种状态之间的切换不影响处理器的工作模式和寄存器的内容。 2、ARM处理器在处理异常时,不管处理器处于什么状态,则都将切换到ARM状态。(**********) 另外:ARM的M系列主要用Thumb指令,ARM9和A系列主要用ARM指令 S3C2440.S启动代码中根本就没用Thumb指令 来源: https://www.cnblogs.com/zjy0806/p/11956950.html

一颗ARM架构芯片硬件和软件构架

柔情痞子 提交于 2019-12-05 20:01:23
(一)硬件 主控CPU: 运算和控制核心。基带芯片基本构架采用微处理器+数字信号处理器(DSP)的结构,微处理器是整颗芯片的控制中心,会运行一个实时嵌入式操作系统(如Nucleus PLUS),DSP子系统负责基带处理。应用处理器则可能包括多颗微处理器,还有GPU。微处理器是ARM的不同系列的产品(也可以是x86架构),可以是64位或者32位。处理器内部通过“内部总线”将CPU所有单元相连,其位宽可以是8-64位。 总线: 计算机的总线按功能可以划分为数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制信号。CPU内部部件由内部总线互联,外部总线则是CPU、内存、输入、输出设备传递信息的公用通道,主机的各个部件通过总线相连接。外部设备通过相应的接口电路再与外部总线相连接,从而形成了硬件系统。外部总线通过总线接口单元BLU与CPU内部相连。 片上总线标准高级微控制器总线结构AMBA定义了高性能嵌入式微控制器的通信标准。定义了三组总线:AHB(AMBA高性能总线)、ASB(AMBA系统总线)、和APB(AMBA外设总线)。AHB总线用于高性能、高时钟工作频率模块。AHB为高性能处理器、片上内存、片外内存提供接口,同时桥接慢速外设。DMA、DSP、主存等连在AHB上。ASB总线主要用于高性能系统模块。ASB是可用于AHB不需要的高性能特性的芯片设计上可选的系统总线

ARM架构体系

守給你的承諾、 提交于 2019-12-04 03:47:38
架构 处理器家族 ARMv1 ARM1 ARMv2 ARM2 、 ARM3 ARMv3 ARM6, ARM7 ARMv4 StrongARM 、 ARM7TDMI 、 ARM9 TDMI ARMv5 ARM7EJ 、 ARM9E 、 ARM10E 、 XScale ARMv6 ARM11 、 ARM Cortex-M ARMv7 ARM Cortex-A 、 ARM Cortex-M 、 ARM Cortex-R ARMv8 Cortex-A50 [9] 参考: 【arm cpu架构体系】【armV8】【armv7】【A系列的CPU】 来源: https://www.cnblogs.com/embedded-linux/p/11829416.html

Arm基础

风格不统一 提交于 2019-12-03 12:15:44
1. arm体系的命名格式    字符串ARMv。   ARM指令集版本号。   表示变种的字符。在ARM版本4以后,M变种成为系统的标准功能,   因此M通常不需要列出来。   使用字符x表示缺少某种功能。    2. ARM处理器结构   为增加处理器指令流的速度,ARM7 系列使用3级流水线。      PC指向正被取指的指令,而非正在执行的指令。      该例中用6个时钟周期执行了6条指令   所有的操作都在寄存器中(单周期执行)   指令周期数 (CPI) = 1 3. ARM处理器的工作状态   处理器状态:    ARM9处理器内核使用V4T版本的ARM结构,具有两种操作状态:       ARM状态:32位,这种状态下执行的是字方式的ARM指令       Thumb状态:16位,这种状态下执行半字方式的Thumb指令。 4. 寄存器工作的模式   ARM架构有九种处理器模式,8种特权模式,一种非特权模式即为用户模式   模式            编码        功能                         备注   (用户)USER       10000       大部分运行程序的工作模式               不能直接切换为其他模式   (系统)SYS        11111       用于支持操作系统的特权任务          

ARM、X86和AI处理器的区别

你。 提交于 2019-12-03 07:30:43
ARM、X86和AI处理器的区别 目前主要的处理器架构有: X86: Intel, AMD, 海光, 兆芯 ARM: 华为,飞腾,华芯通,Cavium,Ampere,富士通,亚马逊 POWER:IBM, 中晟宏芯 MIPS:龙芯 Alpha:申威 ARM 架构是开放性的商业 IP 授权,x86 是封闭架构,美国 Intel 和 AMD 对知识产权处于垄断地位 (PS:现在华为等国内公司研发多以ARM架构为主) ARM 比 x86 架构的优势和劣势 优势: 1) 物理核心更多,适用于当前数据中心主流的分布式计算场景;例如大数据、分布式存储、HPC 等; 2) 能耗更能,节能环保;与同样性能的 x86 处理器相比,功耗低 20%以上; 劣势: 1) 单核性能稍弱于 x86; 2) 相比于 Intel AVX512,向量指令运算能力偏弱,在 HPC 部分场景性能低于 x86;对通用场景无任何影响; 什么是异构? 1) 从计算单元角度来看,x86 处理器之外的计算单元,都可认为是异构单元,例如 GPU,FPGA 加速卡等; 2) 从软件系统集群角度来看,基于不同处理器的服务器可以认为是异构;例如基于 E5-2650v4 的大数据集群使用基于 Gold 5115 或者鲲鹏 916 的服务器来扩容,就属于扩容异构节点。 什么是众核? 众核是相对于单核而言,即最早的芯片只有一个核,到后来的双核