赞
踩
ARM是一家公司也是一种CPU架构。
在全球的嵌入式行业中,如果有一个名字你绝对不能忽视,那就是ARM公司。这不是因为他们有着像施瓦辛格一样强壮的“ARM”(手臂),而是因为他们设计的处理器核心,已经深入到我们生活的每一个角落。
ARM,全名Advanced RISC Machines,听起来好像是个高科技健身房的名字,但实际上,他们专门生产“芯片的大脑”——处理器核心。你可以把ARM想象成一个聪明的指挥家,他并不亲自演奏乐器,但他能指导整个乐团,也就是我们的电子设备,奏出美妙的音乐
ARM公司的历史可以追溯到1990年,当时它是由Acorn计算机公司、苹果公司和VLSI Technology三家联手打造的。你可以想象这三家公司就像是三个好朋友,决定一起开个高科技派对,于是他们合伙创办了ARM,为这个派对提供了最强大脑。
派对上,ARM很快就成了明星。他们的RISC(精简指令集计算机)技术,就像是用最少的舞步跳出最炫的舞蹈,高效、低耗,一下子就成了业界的焦点。各大厂商都争相邀请ARM参加他们的舞会,从手机到平板电脑,从智能家居到工业自动化,哪里都有ARM优雅的身影。
你可能会问,ARM为什么这么受欢迎呢?答案很简单,他们就像那些既会唱歌又会跳舞的全能艺人,不仅性能出色,而且功耗低,这意味着我们的手机、平板可以续航更久,这不就是我们想要的吗?而且,ARM还非常灵活,他们可以根据不同厂商的需求进行定制。你想要一个能歌善舞的处理器?没问题,ARM马上就能为你量身打造一个。这种灵活性就像是一个多才多艺的艺人,既能演电影又能唱歌,谁不喜欢呢?到了今天,ARM已经是全球最大的处理器核心供应商之一。他们的产品遍布全球,影响着数十亿人的生活。
注意:ARM公司是专门知识产权供应商,ARM公司本身不直接从事芯片生产,通过转让设计许可由合作公司生产各具特色的芯片。
ARM的体系架构发展历史可以追溯到1983年,当时英国的Acorn电脑公司为了研发一款新的计算机系统,开始设计一种基于RISC架构的处理器。这就是ARM架构的起点。
1985年,ARMv1架构诞生,但这个版本只在原型机ARM1上出现过,并未用于商业产品。紧接着在1986年,ARMv2架构问世,它是首款量产的ARM处理器ARM2的基础,该架构包含了对32位乘法指令和协处理器指令的支持。随后,还推出了ARMv2a架构,并被ARM3处理器所采用。
1990年,ARMv3架构诞生,提高了寻址空间到32位,并首次在ARM6和ARM7处理器中使用。到了1993年,ARMv4架构被广泛采用,特别是在ARM7、ARM8、ARM9和StrongARM等处理器中。这个版本的架构还引入了T变种指令集,允许处理器在Thumb状态下工作,增加了16位Thumb指令集,提高了代码密度。
1998年,ARMv5架构进一步改进了ARM/Thumb状态之间的切换效率,并引入了DSP指令和支持JAVA。而在2001年,ARMv6架构强化了图形处理性能,通过引入SIMD指令集大大提高了语音及图像的处理能力,同时引入了混合16位/32位的Thumb-2指令集。
到了2004年,一个重要的转折点出现,ARMv7架构诞生。从这时开始,ARM以Cortex来命名其处理器,如Cortex-M3/4/7, Cortex-R4/5/6/7, Cortex-A8/9/5/7/15/17等,都是基于这一架构。此外,该架构还包括了NEON技术扩展,大幅提升了DSP和媒体处理吞吐量,并提供了改进的浮点支持。
随着技术的不断进步,ARM架构也在不断发展以满足新的应用需求。2011年,基于ARMv8架构的64位处理器问世,这一架构引入了AArch64(64位)和AArch32(32位)两种执行状态,支持更大的内存空间和更高的性能。
至今,ARM架构已经广泛应用于各种电子设备中,从智能手机和平板电脑到服务器和物联网设备,其高效能和低功耗的特性受到了业界的广泛认可。同时,ARM公司也通过授权其处理器核心设计,成为了全球半导体设计领域的重要参与者。
首先,我们来聊聊Cortex-M3内核的“骨架”。这个内核采用了哈佛结构,这意味着它有两个独立的存储路径,分别用于指令和数据。这就像是一条双向八车道高速公路,数据和指令可以并行不悖地流动,大大提高了处理速度。简单来说,就是它可以同时处理更多的信息,而且不会堵车。
Cortex-M3内核的另一个亮点是它的三级流水线设计。你可以把这想象成一个高效的流水线工厂,从取指、译码到执行,每个步骤都井然有序,确保指令能够迅速而准确地执行。这种设计不仅提高了处理速度,还使得芯片在运行复杂任务时更加稳定可靠。
下图是Cortex-M3内核权威指南中截取的内部结构图
通用寄存器(R0~R12):这些都是32位的通用寄存器,就像处理器的“工作台”,用于进行各种数据操作。值得注意的是,虽然所有这些都是32位,但Thumb 16位指令集主要使用R0~R7,而更强大的32位Thumb2指令则可以利用全部这些寄存器。
双堆栈指针(R13,MSP,PSP):Cortex-M3独特地拥有两个堆栈指针,它们都是“堆积”的,这意味着在任何给定时间,系统只会使用一个。
主堆栈指针(MSP):复位后使用,用于操作系统内核和异常处理流程。
进程堆栈指针(PSP):由用户的应用程序代码使用。
连接寄存器(R14,LR):当调用子程序时,R14负责存储并返回地址,这是一个非常巧妙的设计。与其他处理器不同,ARM架构通过直接在寄存器中存储返回地址,减少了访问内存的次数。对于只有一级子程序调用的代码,这显著提高了效率,因为无需访问堆栈内存。如果需要多级调用,前一级的R14值会被推送到堆栈中。
程序计数寄存器(R15,PC):这个寄存器始终指向当前的程序执行地址。通过修改它的值,我们可以改变程序的执行流程,这为高级编程技巧和调试提供了强大的工具。
特殊功能寄存器:包括程序状态字寄存器组、中断屏蔽寄存器组和控制寄存器等,这些专用寄存器控制着处理器的各种特定功能和状态。
可嵌套中断支持:当一个异常发生时硬件自动比较是否比当前的异常优先级高,如果优先级更高,处理器会中断当前的中断服务程序立即处理这个异常(立即抢占)
向量中断支持:cortex-m3 有一个向量表,当异常发生时程序根据向量表找到中断服务程序。
动态优先级调整:程序在运行过程中可以更改中断的优先级。
中断延时大大缩短:为缩短中断延迟cortex-m3引入自动现场保护和恢复,以及其它措施。
中断可屏蔽:顾名思义,在程序运行时可以将中断全部关闭。比如:临界代码段,要关掉中断。
Cortex-M3支持4GB(2^32)存储空间。Cortex-M3的存储器映射并非由ARM公司统一规定,而是交由半导体厂商来决定。这种灵活性使得不同的半导体厂商可以根据其产品特性和市场需求,对存储器进行更为精细化的配置和优化。值得一提的是,Cortex-M3内核预先定义了一个“粗线条的”存储器映射框架。这个框架为半导体厂商提供了一个基础,使得他们可以在此基础上进行进一步的定制和开发。通过这种方式,Cortex-M3内核既保证了存储器映射的一致性和通用性,又赋予了半导体厂商足够的自由度来满足特定应用的需求。
Cortex-M3内核在设计之初就充分考虑了调试的便捷性和高效性,因此在内核水平上集成了多种与调试息息相关的特性。这些特性为开发者提供了强大的调试工具集,从而能够更快速地定位问题、优化代码以及验证系统性能。
其中,最主要的调试功能莫过于程序执行控制。通过这一功能,开发者可以实现对程序的精确控制,包括停机、单步执行以及设置指令断点等。停机功能允许开发者在任意时刻暂停程序的执行,便于观察程序状态和分析问题。单步执行则可以让开发者一步一步地跟踪程序的执行流程,从而深入了解程序的运行细节。此外,通过设置指令断点,开发者可以在程序执行到特定指令时自动暂停,以便检查此时的程序状态和数据情况。
除了程序执行控制外,Cortex-M3还提供了数据观察点功能。这一功能允许开发者监控特定内存地址或寄存器的值,当这些值发生变化时,系统会自动触发断点或通知开发者。这对于调试复杂的数据流和状态机非常有帮助。在实际开发中经常会使用这个功能。
在调试过程中,寄存器和存储器的访问也是至关重要的。Cortex-M3内核支持直接访问寄存器和存储器,使得开发者能够实时查看和修改这些值,从而更深入地了解程序的运行情况。
此外,Cortex-M3还提供了性能速写功能以及各种跟踪机制。性能速写可以帮助开发者快速评估代码的性能瓶颈,而跟踪机制则可以记录程序的执行路径和时间戳等信息,为后续的性能分析和优化提供有力支持。
为了便于与外部调试工具的连接和通信,Cortex-M3提供了多种访问接口。其中,SWJ-DP(Serial Wire JTAG Debug Port)是一个重要的接口标准,它同时支持传统的JTAG调试协议和新的串行线调试(Serial Wire Debug, SWD)协议。这意味着开发者可以根据自己的需求和调试工具的兼容性选择合适的调试协议进行连接和调试。
总的来说,Cortex-M3内核在调试方面的丰富特性和强大功能为开发者提供了极大的便利和灵活性。这些特性和功能不仅有助于提高调试效率和质量,还为开发者提供了更深入的程序理解和性能优化手段。
对于初学者来说,这篇文章不需要深究,简单了解一下即可。有些概念会随着工作的深入才能体会出来。想深入学习推荐《Cortex-M3权威指南(中文版)》
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。