ARM基础

keil_5 汇编编程环境搭建





























一些bug的解决:
如果过创建工程文件后,因为找不到 .o文件 报错:

Rebuild target 'Target 1'
assembling start.s...
linking...
d:/sourcvery_codebench_lite_for_arm_gnu_linux/bin/../lib/gcc/arm-none-linux-gnueabi/4.6.1/../../../../arm-none-linux-gnueabi/bin/ld.exe: cannot find start.o
collect2: ld returned 1 exit status
".\Objects\demo.elf" - 1 Error(s), 0 Warning(s).

处理方法:
重新指定下obj的目录

即可解决:

Rebuild target 'Target 1'
assembling start.s...
linking...
d:/sourcvery_codebench_lite_for_arm_gnu_linux/bin/../lib/gcc/arm-none-linux-gnueabi/4.6.1/../../../../arm-none-linux-gnueabi/bin/ld.exe: warning: cannot find entry symbol _start; defaulting to 00000000
".\demo.elf" - 0 Error(s), 0 Warning(s).

相关软件下载

  1. keil5 官网:http://www2.keil.com/mdk5
    网盘:mdk532.exe Version 5.32

  2. keil5 ARMv7 ARMv9 安装包 http://www2.keil.com/mdk5/legacy
    网盘:MDK79525.EXE Version 5.25

  3. 汇编编程环境搭建pdf格式 网盘:keil_5 汇编编程环境搭建.pdf

  4. keil5 破解工具 网盘:KEIL5破解工具(2032年有效期).zip

  5. 交叉编译工具 网盘:arm-2011.09-70-arm-none-linux-gnueabi

目前arm架构处理器手机端应用的最前沿状况分析

  1. 苹果:A14 代表作 iphone12 ARMv8.x架构 微架构为苹果自研 6CPU+4GPU组合 台积电5nm工艺
  2. 高通骁龙:865plus 代表作 三星note20 小米mix4 ARMv8.x架构 微架构 cortex-A774+cortex-A554 7nm工艺
  3. 三星:Exynos990 代表作 三星Galaxy S20(中 美 韩地区为骁龙865版本其余地区采用Exynos 990) Exynos是2011年以后三星产品的正式代号,猎户座(Orion)是该产品的研发代号。 7nm EUV工艺。
  4. 联发科:天玑1000 代表作:RedMi K30 ARMv8架构 cortex-A774 + cortex-A554 7nm工艺。
  5. 华为:麒麟990 5G 代表作:华为Mate30 ARMv8架构 cortex-A762 + cortex-A554 7nm+EUV工艺。 为何不选择A77,官方解释是发热功耗大,等5nm再使用A77.

arm架构处理器的发展历程及命名方式

内核版本号          SoC版本号           芯片型号(以三星为例)
ARMv1
........
ARMv4               ARM7                s3c44B0
ARMv4               ARM9                s3c2440  s3c2410
ARMv5               ARM9+xScale
ARMv6               ARM11               s3c6410
                    Cortex-M
ARMv7               Cortex-A            A8,A9
                    Cortex-R

ARMv8               Cortex-M/A/R
ARMv8.1             Cortex-M/A/R
ARMv8.2             Cortex-M/A/R
ARMv8.3             Cortex-M/A/R
ARMv8.4             Cortex-M/A/R            //截至2020.10.18
........
----------------------------------------------------------------------------------
Cortex-M    microcontroller微控制器    就是单片机  STM32 (重点学习)
Cortex-A    application应用级处理器     就是手机 平板 电脑的CPU (重点学习)
Cortex-R    realtime 实时处理器         相应速度快,主要用在工业,航天等领域
----------------------------------------------------------------------------------
Cortex-A的发展历程
内核版本号           SoC版本号              芯片型号                    代表机型
ARMv7               Cortex-A8           S5PV210,S5PC100             iPhone 3GS
                    Cortex-A9           Exynos4412                  魅族MX 魅族MX2
                    Cortex-A15          Exynos5250,5450            惠普Chromebook
                    Cortex-A7           全志A10,A20,A31             Galaxy Note 3 Neo,Samsung Galaxy K Zoom
                    Cortex-A5           

ARMv8               Cortex-A32
                    Cortex-A34
                    Cortex-A35
                    Cortex-A53          KYLIN 930/935               P8,荣耀7,Mate S
                    Cortex-A55          KYLIN 985/990/990 5G        Mate20,Mate30
                    Cortex-A65          
                    Cortex-A65AE
                    Cortex-A72          KYLIN 950                   Mate 8
                    Cortex-A73          KYLIN 960                   Mate 9
                    Cortex-A75          Exynos 9820                 Galaxy S10
                    Cortex-A76          KYLIN 985/990/990 5G        Mate20,Mate30
                    Cortex-A76AE        
                    Cortex-A77          Exynos 980                  vivo S6
                    Cortex-A78
                    Cortex-A78AE
//截至2020.10.18
----------------------------------------------------------------------------------
各版本Cortex-A Soc对应的用途:(仅统计近10年,2020.10.18~2011)
Cortex-A78AE
Arm最先进的处理器,专为安全关键型应用而设计。
适用于复杂的自动驾驶和工业自主系统。
混合模式的分体锁定功能,实现灵活操作
加强对ISO 26262 ASIL B和ASIL D安全要求的支持。

Cortex-A78
基于DynamIQ技术的第四代高性能CPU。最高效的高级Cortex-A CPU
专为下一代消费类设备打造
在新的外形尺寸和可折叠设备上实现沉浸式体验。
提高ML设备的响应速度和能力,如人脸和语音识别等。

Cortex-A77
基于DynamIQ技术的第三代高性能CPU。
5G移动解决方案的领导性能和效率
提高设备上机器学习的响应速度。
专为下一代智能手机和笔记本电脑而生。

Cortex-A76
基于DynamIQ技术的第二代高性能CPU。
设计用于承担复杂计算任务的设备
更高的单螺纹性能,提高能源效率
为机器学习应用提供更快的响应速度和最先进的支持。

Cortex-A76AE
全球首款集成安全功能的自主级处理器。
专为ADAS和自动驾驶汽车等功能性安全应用而设计。
首款具有Split-Lock功能的应用处理器
安全性符合工业标准,包括ISO 26262 ASIL D。

Cortex-A75
基于DynamIQ技术的第一代高性能CPU。
灵活的架构提供了广泛的支持生态系统
每个时钟周期最多并行执行三条指令。
市场用途广泛,涵盖智能手机、服务器、汽车应用等。

Cortex-A73
保持高性能的高能效CPU
与以前的产品相比,功率效率提高了30%。
最小的Armv8-A处理器
专为移动和消费者应用而设计

Cortex-A72
具有移动和嵌入式技术等多种用途的高性能CPU。
先进的分支预测器减少了浪费的能源消耗
减少内存需求,获得显著优势
适用于在Arm big.LITTLE配置中实施。

Cortex-A65AE
Arm首款多线程Cortex-A CPU,带Split-Lock,实现功能安全。
为内存密集型工作负载提供一流的吞吐效率
双核锁步法的最高安全级别,适用于要求严格的安全关键任务。
支持Split-Lock,提高混合关键应用的成本效益。

Cortex-A65
Arm的首款多线程Cortex-A CPU。
为内存密集型工作负载提供一流的吞吐效率。
同时处理两个线程,在一个集群中最多可以扩展到8个核心。
基于DynamIQ技术,支持一系列配置。

Cortex-A55
在DynamIQ配置中可与高性能CPU搭配的最高效率中端处理器。
灵活的设计满足要求,支持广泛的市场应用
适用于环境受限的小型设备
设计为与DynamIQ配置的兼容性。

Cortex-A53
最广泛使用的中端处理器,性能和效率均衡。
可提供臂式灵活通道
高单线程和FPU/Neon性能的选择。
支持汽车和网络等领域的广泛应用。
最广泛部署的64位Armv8-A处理器

Cortex-A35
Armv8-A处理器,无缝支持32位和64位。
电源管理功能可减少电源预算
支持64位处理,适合嵌入式应用
用于IoT节点和网关的理想处理器。

Cortex-A34
最小且最省电的64位Armv8-A处理器
可从单核或最多4个处理器的集群中进行扩展
先进的电源管理,具有闲置电源管理功能
支持64位处理,适合嵌入式应用

Cortex-A32
体积最小、功耗最低的Armv8-A处理器
先进的电源管理与闲置电源管理功能。
可升级为单核或最多四个处理器的集群使用
嵌入式和物联网市场的合理选择。

Cortex-A7
最小、最高效的32位Armv7-A处理器。
通过Armv7-A扩展提供增强的硬件虚拟化。
比前代产品的内存性能提高了20%。
支持32位、丰富的操作系统,包括Linux。

Cortex-A5
可定制的Armv7-A处理器,在低功耗的情况下实现高性能。
可扩展的多功能性,适用于成本敏感型、低功耗的应用。
先进的功能和丰富的操作系统支持,适用于最小的设备。
通过Arm DesignStart快速、低成本地访问Cortex-A5。
----------------------------------------------------------------------------------
Cortex-M的发展历程
内核版本号           SoC版本号              芯片型号
ARMv7               Cortex-M0
                    Cortex-M0+
                    Cortex-M1
                    Cortex-M3               STM32
                    Cortex-M4
                    Cortex-M7
                    Cortex-M23
                    Cortex-M55
                    Cortex-M33
                    Cortex-M35P
//截至2020.10.18
----------------------------------------------------------------------------------
各版本Cortex-M Soc对应的用途:(仅统计近10年,2020.10.18~2011)
Cortex-M35P
首款内置防篡改功能的Armv8-M处理器
增加的物理弹性和系统安全功能不会影响性能。
包括集成数字信号处理(DSP)选项
层层保护,防止简单的攻击和系统接管。

Cortex-M33
实时确定性、效率和安全性的理想融合。
简化数字信号处理的安全性
使用TrustZone软件隔离使您的产品与众不同。
为最简单和成本敏感的设备带来32位性能

Cortex-M55
Arm最具AI能力的Cortex-M处理器,也是首款采用Arm Helium技术的处理器。
为Cortex-M提供最高、最高效的ML和DSP性能。
通过Cortex-M的易用性、单一工具链、优化的软件库和业界领先的嵌入式生态系统,简化物联网的AI实现。

Cortex-M23
体积最小、功耗最低的微控制器,具有TrustZone的安全性。
包括内置的TrustZone安全基础
内存保护将意外访问的风险降至最低
适用于能量收集IoT节点和小型传感器的理想处理器。

Cortex-M7
最高性能的Cortex-M处理器
简化信号处理,将高性能DSP推向大众。
内置浮点处理,降低了功耗
支持创新的MCU,用于更密集的自动化任务

Cortex-M4
混合信号设备的控制和性能
集成的数字信号处理(DSP)简化了系统设计。
微控制器的基本功能使其成为工业应用的理想选择。
部署最广泛的Cortex-M处理器,拥有广泛的生态系统。

Cortex-M3
32位元的超凡性能与低能耗
可通过DesignStart获得免许可费的服务。
常用于许多智能家居设备
在广泛的嵌入式应用中的数十亿台设备中进行部署

Cortex-M1
用于FPGA器件的小型、低功耗Cortex-M处理器。
可通过DesignStart获得免许可费的服务。
基于最成熟、最值得信赖的嵌入式架构
针对FPGA开发进行了优化

Cortex-M0+
目前最节能的Arm处理器
以8位成本享受32位处理智能的优势
三种高度优化的低功耗模式,节约能源
最常用于医疗、健身等可穿戴设备中。

Cortex-M0
目前最小的Arm处理器
可通过DesignStart获得免许可费的服务。
是智能传感器和混合信号系统芯片(SoC)的理想选择。
三种高度优化的低功耗模式,节约能源

参考文档:https://www.mydrivers.com/zhuanti/tianti/01/index_other.html#samsung
https://www.arm.com/products/silicon-ip-cpu

一点感悟

  1. 平时所说的CPU 并不是实际意义上的CPU 而是SoC,以为实际意义上的CPU,在现阶段已经不存在了。
  2. 被集成到了SoC内部的外设,称为片内外设更为贴切一些。
  3. ARM公司出售的是实际意义上的CPU+内部总线,不提供内部外设及外部外设以及外部总线。
    明确以上三点,ARM架构的cpu命名规范也就清晰了,比如课程所学习的4412芯片:
    实际意义上的CPU 也就是其内核,使用了ARMv7架构,
    ARM厂商对使用了此种 ARMv7架构的 cpu/内核 的 SoC 命名为 Coretex-A9,
    三星使用Coretex-A9为内核基础,在此之上加入了片内外设,构成并命名4412芯片。


ARM的工作模式

  1. ARM主要有7个基本工作模式(特权模式 特权模式异常模式)
  1. ARM 有37个寄存器
    1 个用作PC( Program Counter)
    1个用作CPSR(Current Program Status Register)
    5个用作SPSR(Saved Program Status Registers)
    30 个通用寄存

  2. ARM 工作模式及寄存器框图

  3. CPSR 寄存器

条件位:
N = Negative result from ALU 负数标志位
Z = Zero result from ALU 0
C = ALU operation Carried out or borrow 借位标志位
V = ALU operation oVerflowed 溢出标志位

T 位 J 位:
T = 0;J=0 处理器处于 ARM 状态
T = 1;J=0 处理器处于 Thumb 状态

中断禁止位:
I = 1: 禁止 IRQ.
F = 1: 禁止 FIQ

Mode位:处理器模式位
10000 User mode;
10011 SVC mode;
10010 IRQ mode;
10001 FIQ mode;
10111 Abort mode
11011 Undfined mode;
11111 System mode;

CPSR / SPSR操作指令
mrs r0,CPSR
msr CPSR,r0

寄存器R13在ARM指令中常用作堆栈指针SP,但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针,而在Thumb指令集中,某些指令强制性的要求使用R13作为堆栈指针.

由于处理器的每种运行模式均有自己独立的物理寄存器R13,在用户应用程序的初始化部分,一般都要初始化每种模式下的R13,使其指向该运行模式的栈空间。这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入R13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的正常执行。
R14称为子程序链接寄存器LR(Link Register),当执行子程序调用指令(BL)时,R14可得到R15(程序计数器PC)的备份.

在每一种运行模式下,都可用R14保存子程序的返回地址,当用BL或BLX指令调用子程序时,将PC的当前值复制给R14,执行完子程序后,又将R14的值复制回PC,即可完成子程序的调用返回。以上的描述可用指令完成。
执行以下任意一条指令:

MOV PC, LR
BX LR
在子程序入口处使用以下指令将R14存入堆栈:
STMFD SP!,{,LR}
对应的,使用以下指令可以完成子程序返回:
LDMFD SP!,{,PC}
R14也可作为通用寄存器。
3,程序计数器PC(R15)
寄存器R15用作程序计数器(PC),在ARM状态下,位[1:0]为0,位[31:2]用于保存PC,在Thumb状态下,位[0]为0,位[31:1]用于保存PC.
由于ARM体系结构采用了多级流水线技术,对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节程序状态寄存器