一些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).
keil5 官网:http://www2.keil.com/mdk5
网盘:mdk532.exe Version 5.32
keil5 ARMv7 ARMv9 安装包 http://www2.keil.com/mdk5/legacy
网盘:MDK79525.EXE Version 5.25
汇编编程环境搭建pdf格式 网盘:keil_5 汇编编程环境搭建.pdf
keil5 破解工具 网盘:KEIL5破解工具(2032年有效期).zip
交叉编译工具 网盘:arm-2011.09-70-arm-none-linux-gnueabi
内核版本号 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.用户模式(USR):正常程序执行模式,不能直接切换到其他模式
2.系统模式(SYS):运行操作系统的特权任务,与用户模式类似,但具有可以直接切换到其他模式等特权
3.快中断模式(FIQ):支持高速数据传输及通道处理,FIQ异常响应时进入此模式
4.中断模式(IRQ):用于通用中断处理,IRQ异常响应时进入此模式
5.管理模式(SVC,supervisor):操作系统保护模式,系统复位和软件中断响应时进入此模式(由系统调用执行软中断SWI命令触发)
6.中止模式(ABT):用于支持虚拟内存和/或存储器保护,在ARM7TDMI没有大用处
7.未定义模式(UND):支持硬件协处理器的软件仿真,未定义指令异常响应时进入此模式
ARM 有37个寄存器
1 个用作PC( Program Counter)
1个用作CPSR(Current Program Status Register)
5个用作SPSR(Saved Program Status Registers)
30 个通用寄存
ARM 工作模式及寄存器框图
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个字节程序状态寄存器