ARM Cortex-M3/M4 权威指南 笔记【一】技术综述
一、Cortex-M3/M4 处理器的一般信息
1.1 处理器类型
ARM Cortex-M 为 32 位 RISC(精简指令集)处理器,其具有:
- 32位寄存器
- 32位内部数据通路
- 32位总线接口
除了 32 位数据,Cortex-M 处理器(以及其他任何 ARM 处理器)还可以高效地处理 8 位和 16 位数据。Cortex-M3/M4 处理器还支持涉及 64 位数据的多种运算(如乘和累加)。
Cortex-M3/M4 处理器都具有三级流水线(取指、译码和执行),它们都基于哈佛总线架构,取指令和数据访问可以同时执行。
ARM Cortex-M 处理器的存储器系统使用 32 位寻址,地址空间最大为 4GB。存储器映射是一致的,这就意味着尽管总线接口有多个,4GB 存储器空间却只有一个。存储器空间包括程序代码、数据、外设以及处理器内的调试支持部件。
与其他任何 ARM 处理器相同,Cortex-M 处理器基于一种加载一存储架构。这也就意味着数据需要从存储器中加载和处理后,使用多个单独的指令写回存储器。例如,要增加 SRAM 中存储的数据值,处理器需要使用一条指令从 SRAM 中读出数据,并且将数据放到处理器的寄存器中,然后使用第二条指令增加寄存器中的数据值,最后使用第三条指令将数值写回存储器。处理器内部的寄存器细节一般被称作编程模型。
1.2 处理器架构
处理器只是微控制器芯片中的一部分。存储器系统、外设和各种接口特性由微控制器供应商开发。因此,从低成本的微控制器产品到高端的多处理器产品,可以发现 Cortex-M 处理器用在诸多设备中,不过这些设备的架构相同。对于 ARM 处理器,架构一般指两个方面:
架构:指令集架构(ISA)编程模型(对软件可见)以及调试方法(对调试器可见)。
微架构:接口信号、指令执行时序以及流水线阶段等实现相关的细节,微架构为处理器设计相关的。
对于多年来发布的不同 ARM 处理器,ARM 架构存在多个版本。例如,Cortex-M3/M4 处理器都基于 ARMv7-M 架构。一个指令集架构可以包含多个微架构设计,如不同数量的流水线阶段和不同类型的总线接口等。
要了解 ARMv7-M 架构的细节,可以参考 ARMv7-M 架构参考手册(也被称作 ARMv7-MARM)的内容。该文献包括:
- 指令集细节
- 编程模型
- 异常模型
- 存储器模型
- 调试架构
待补充...
1.3 指令集
Cortex-M 处理器使用的指令集名为 Thumb (其中包括16 位 Thumb 指令和更新的 32 位 Thumb 指令),Cortex-M3/M4 处理器用到了 Thumb-2 技术,它允许 16 位和 32 位指令的混合使用,以获取更高的代码密度和效率。
ARM7TDMI 等经典的 ARM 处理器具有两种操作状态:
- 32 位的 ARM 状态
- 16 位的 Thumb 状态
在 ARM 状态中,指令是 32 位的,内核能够以很高的性能执行所有支持的指令。而对于 Thumb 状态,指令是16位的,这样可以得到很好的代码密度,不过 Thumb 指令却不具有ARM 指令的所有功能,要完成特定的操作,可能需要更多的指令。
要同时得到两者的优势,许多用于经典 ARM 处理器的应用程序混合使用了ARM 和 Thumb 代码。不过这种混合编码的方式并不是非常理想,它会带来状态间切换的开销(执行时间和指令数),而且两个状态的分离还增加了软件编译过程的复杂度,对于不是很熟练的开发人员来说,优化代码更加困难。
随着 Thumb-2 技术的引人,Thumb 指令被扩展为支持 16 位和 32 位两种解码方式,现在,无须在两个不同操作状态间切换就可以满足所有的处理需求。事实上,Cortex-M 处理器根本不支持 32位的 ARM 指令甚至中断处理都可以完全在 Thummb 状态中
- 无状态切换开销,节省执行时间和指令空间。
- 无须指定源文件中的 ARM 状态或 Thumb 状态,
- 开发软件也更容易。在获得最佳的代码密度和效率的同时,还能很容易地达到高性能。
- 利用 Thumb-2 技术,与 ARM7TDMI 等经典处理器相比,Thumb 指令集已经得到很大的扩展。注意,尽管所有的 Cortex-M 处理器都支持 Thumb-2 技术,它们实现的 Thumb ISA 子集不尽相同。
指令组 | Cortex-M0、M1 | Cortex-M3 | Cortex-M4 | 具有 FPU 的 Cortex-M4 |
16 位 ARMv6-M 指令 | • | • | • | • |
32 位间接跳转链接指令 | • | • | • | • |
32 位系统指令 | • | • | • | • |
16 位ARMv7-M 指令 | • | • | • | |
32 位ARMv7-M 指令 | • | • | • | |
DSP 扩展 | • | • | ||
浮点指令 | • |
有些 Thumb 指令集中定义的指令在当前的 Cortex-M 处理器中是不支持的,如协处理器指令(尽管可能会增加经过存储器映射的独立的数据处理引擎)。同样,有些其他的经典 ARM 处理器中的Thumb 指令也不再支持了,如带有立即数的跳转链接并交换状态(BLX)(用于将处理器状态从Thumb切换到ARM)、几个修改处理器状态指令(CPS)以及 SETEND(端设置)指令,它们都是随着架构 v6 引人的。
1.4 模块框图
从较高的层级来看,Cortex-M3和Cortex-M4是非常相似的。尽管它们在内部数据通路设计上存在巨大差异,处理器的一些部分还是相似的,如取指缓冲,部分指令译码和执行阶段以及 NVIC。另外,“内核”层级外的部件基本上是相同的。
Cortex-M3/M4 处理器包含处理器内核、嵌套向量中断控制器(NVIC),SysTick 定时器以及可选的浮点单元(用于 Cortex-M4)。除了这些以外,处理器中还有一些内部总线系统、可选的存储器保护单元(MPU)以及支持软件调试操作的一组部件。内部总线连接可以将处理器和调试产生的传输送到设计的各个部分。
Cortex-M3/M4 处理器是高度可配置的。例如,调试特性是可选的,若产品需要支持调试,片上系统设计人员可以将调试部件去掉,这样可以显著降低设计的硅片面积。有些情况下,芯片设计人员还可以选择降低硬件指令断点和数据监视点比较器的数量,以降低系统的门数量。许多系统特性也是可配置的,如中断输入的数量、支持的中断优先级的数量以及 MPU 等。
所示的框图为ARM提供给芯片设计人员的参考。芯片供应商也可以对其进行修改,定制调试接口等调试支持部件或增加设备相关的低功耗特性等(例如,增加某种唤醒中断控制器)。
Cortex-M3和Cortex-M4处理器的顶层具有多个总线接口
1.5 储存器系统
Cortex-M3/M4 处理器本身并不包含存储器(没有程序存储器、SRAM或缓存),它们具有通用的片上总线接口,因此,微控制器供应商可以将它们自己的存储器系统添加到系统中。
一般来说,微控制器供应商需要将下面的部件添加到存储器系统中:
- 程序存储器,一般是Flash
- 数据存储器,一般是SRAM
- 外设
这样,不同微控制器产品可能会具有不同的存储器配置、不同的存储器大小和类型,以及不同的外设。
Cortex-M 处理器的总线接口为 32 位宽,且基于高级微控制器总线架构(AMBA)标准。AMBA 中包含多个总线协议,任何芯片设计者都可以免费使用这些标准协议。AMBA 规范可以从 ARM 网站下载。由于这些标准协议的低硬件成本、效率以及开放性,它们大受芯片设计者的欢迎。
Cortex-M3/M4 处理器主要使用的总线接口协议为 AHB Lite(高级高性能总线),它用于程序存储器和系统总线接口。AHB Lite 协议为流水线结构的总线协议,可以在低硬件成本下实现高运行频率。高级外设总线(APB)接口为处理器使用的另外一种总线协议,它通常用于基于 ARM 的微控制器的总线系统。另外,APB 协议在 Cortx-M3/M4 处理器内部还用于调试支持。
与片外总线协议不同,AHBLite 和 APB 协议相对简单。这是因为芯片内的硬件配置是固定的,无须一种复杂的初始化协议来处理可能的配置(例如,无须支持类似于计算机技术中的“热插拔”)。
由于这种开发方式和通用的总线架构的使用。每位芯片设计者都可以为 ARM 处理器开发外设、存储器控制器以及片上存储器模块。这些设计通常被称作 IP,微控制器供应商可以在他们的产品中使用自己的外设设计或者其他公司的授权 IP。通过一种标准的总线协议,这些 IP 可以很轻松地被集成到一个大的设计中。如今,AMBA协议已经成为了片上总线系统的标准,可以在许多片上系统设备中找到这些设计,其中,也包括其他处理器设计公司的处理器。
1.6 中断和异常支持
Cortex-M3/M4 处理器中存在一个名为嵌套向量中断控制器(NVIC)的中断控制器,它是可编程的且其寄存器经过了存储器映射。NVIC 的地址固定,而且 NVIC 的编程模型对于所有的 Cortex-M 处理器都是一致的。
除了外设和其他外部输人的中断外,NVIC 还支持多个系统异常,其中,包括不可屏蔽中断(NMI)和处理器内部的其他异常源。
Cortex-M3/M4 处理器是可配置的,微控制器供应商能够决定 NVIC 设计实际支持的可编程中断优先级的数量。尽管 NVIC 的一些细节在不同的 Cortex-M3/M4 处理器间可能存在差异,中断/异常的处理和 NVIC 的异常模型却是相同的,它们定义在架构参考手册中。
二、Cortex-M3/M4 处理器的特性
目前,大多数主要微控制器供应商都在对基于 ARMCortex-M3/M4 处理器的微控制器出货。Cortex-M 处理器的哪些优势使得它们如此受欢迎?本节将会总结 Cortex-M3/M4 处理器的特点和优势。
2.1 性能
Cortex-M 处理器给微控制器产品带来了高性能。
- 三级流水线结构使得包括乘法在内的多数指令,可以在单周期内执行,同时允许微控制器设备运行较高的频率,一般可以超过 100MHz,而利用现代半导体生产工艺则可以达到 200MHz。甚至在运行和其他多数处理器产品相同的频率时,Cortex-M3/M4 处理器的时钟周期比(CPI)也会更高。这样每 MHz 就可以完成更多的任务,若要降低功耗,也可以让系统运行在较低的时钟率下。
- 由于多总线接口,指令和数据访问可以同时执行。
- 流水线结构的总线接口使得存储器系统可以运行较高的时钟频率。
- 由于指令集非常高效,执行复杂运算时可以使用较少的指令。
- 每次取指令都是 32 位的,而多数指令则是 16 位的,因此一次可以取两条指令,存储器接口上的多余带宽也带来了更高的性能和更佳的能耗效率。
由于处理器的高性能,之前无法用 8 位 / 16 位低成本微控制器开发的产品现在就可以实现。例如,无须换成高端的微处理器,也可以将低成本的图形接口添加到嵌人式设备中。
处理器 | Dhrystone 2.1/MHz | CoreMark/MHz |
Cortex-M3 | 1.25 DMIPS/MHz | 3.32 |
Cortex-M4 | 1.25 DMIPS/MHz | 3.38 |
具有FPU的Cortex-M4 | 1.25 DMIPS/MHz | 3.38 |
2.2 代码密度
与其他处理器架构相比,ARM Cortex-M 处理器使用的 Thumb 指令可以提供极佳的代码密度。许多软件开发人员在从 8 位微控制器移植时,会发现代码体积显著减小,而性能却得到很大的提升。Cortex-M 处理器的代码密度也比许多常用的 16 位和 32 位架构要高。另外,还有其他优势:
- 利用 Thumb-2 技术,无须状态切换开销就可以同时使用 16 位指令和 32 位指令,大多数简单操作可以用 16 位指令实现。
- 多种存储器寻址模式用于高效的数据访问。
- 多种存储器访问可以由单指令完成。
- Cortex-M3/M4 都支持硬件除法指令和乘累加(MAC)指令。Cortex-M3/M4 中的位域处理指令。
- Cortex-M4 支持单指令多数据(SIMD)指令。
- Cortex-M4 支持可选的单精度浮点指令。
除了低系统成本,高代码密度同样可以降低功耗,这是因为可以使用具有较小 Flash 存储器的设备。还可以将部分程序代码复制到 SRAM 中,这样在提高执行速度的同时,也无须担心占用太多的 SRAM 空间。
2.3 低功耗
低功耗是 Cortex-M 处理器的设计目标,许多 Cortex-M3/M4 微控制器产品在运行时功耗会低于200A/MHz(1.8V 供电时约为 0.36mW/MHz),而有些甚至会低于 100μA/MHz。Cortex-M 处理器的低功耗特性包括:
- Cortex-M3 面向低成本微控制器设计,它们的硅片面积不能太大(门数低)。由于具有 SIMD 指令和可选的浮点单元,Cortex-M4 要稍微大一些。三级流水线设计可以很好地平衡性能和硅片大小。
- 由于 Cortex-M 处理器的高代码密度,软件开发者可以使用具有较小程序存储器的设备来实现自己的产品,这样可以降低功耗。
- Cortex-M 处理器具有多个低功耗特性,其中,包括定义在架构中的多个休眠模式和集成的架构时钟支持,这样当处理器的某部分不使用时,可以将这部分的时钟电路关闭。
- 完全静态、同步以及可综合的设计使得处理器在生成时可以使用任何低功耗或标准的半导体工艺技术。对于从版本 2 开始的 Cortex-M3 以及当前所有版本的 Cortex-M4,处理器中存在一个名为唤醒中断控制器(WIC)的可选硬件单元,它可以使能状态保持功率门(SRPG)等低功耗技术。
由于这些低功耗特性的存在,Cortex-M 处理器非常受嵌人式产品设计者的欢迎,他们总是会寻找能够改进自己的可移动产品电池寿命的方法。除了较长的电池寿命,微控制器的低功耗也有助于降低电磁干扰(EMI),而且可能会简化电源设计(或者减小电池尺寸),因此,可以降低系统成本。
3.4 储存器系统
Cortex-M3/M4处理器支持多种存储器特性:
- 可寻址存储器空间共为4GB,且以32位寻址,无须将存储器分页。
- 所有的 Cortex-M 处理器的存储器映射定义都是一致的,预定义的存储器映射使得处理器设计可以为哈佛总线架构进行优化,而且访问处理器内经过存储器映射的外设(如NVC)也非常容易。
- 流水线结构的 AHB Lite 总线接口可以提供高速且低等待的传输,AHB Lite 接口支持 32 位、16 位和 8 位数据的高效传输。总线协议还允许插人等待状态、支持总线错误条件及允许多个总线主控共用总线。
- 可选的位段特性。SRAM 和外设空间中存在两个可位寻址的区域,通过位段别名地址修改的位数值会被自动转换为位段区域的读一修改一写的原子操作。
- 多处理器系统设计的排他访问,适用于多处理器系统中的信号量操作。
- 支持小端或大端的存储器系统。Cortex-M3/M4 处理器既可以运行在小端模式,也可以运行在大端模式。不过,基本上所有的微控制器都是要么为小端要么为大端的,不会两者兼有。多数Cortex-M3 微控制器产品使用小端。
- 可选的存储器保护单元(MPU)。
3.5 储存器保护单元
MPU 为 Cortex-M3/M4 处理器中的可选特性,微控制器供应商可以决定是否使用 MPU。MPU 为监控总线传输的可编程设备,需要通过软件(一般是嵌入式 OS)配置若 MPU 存在,应用程序可以将存储器空间分为多个部分,并为每个部分定义访问权限。当违反访问规则时,错误异常就会产生,错误异常处理则会分析问题,而且如果可能,将错误加以修复。
MPU可以有多种使用方式。一般情况下,OS 会设置 MPU 以保护 OS 内核和其他特权任务使用的数据,防止恶意用户程序的破坏。而且 OS 也可以选择将不同用户任务使用的存储器隔离开来。这些处理有助于检测系统错误,并且提高了系统在处理错误情况时的健壮性。MPU 也可以将系统配置为只读的,防止意外擦除 SRAM 中的数据或覆盖指令代码。MPU 默认禁止,若应用不需要存储器保护特性,就无须将其初始化。
3.6 中断处理
Cortex-M3/M4 处理器中存在一个复杂的中断控制器,其被称作嵌套向量中断空制器(NVIC)。NVIC 具有多个特性:
- 支持最多 240 个中断输人、不可屏蔽中断(NMI)输人和多个系统异常。每个中断(NMI除外)都可以被单独使能或禁止。
- 中断和多个系统异常具有可编程的优先级。对于Cortex-M3/M4,优先级可以在运行时动态修改(注意,Cortex-M0/M0 不支持优先级的动态修改)。
- 嵌套中断/异常以及中断/号常按照优先级的自动处理。
- 向量中断/异常。这就意味着处理器会自动取出中断/异常向量,无须软件确定产生的是哪个中断/异常。
- 向量表可以重定位在存储器中的多个区域。
- 低中断等待。对于具有零等待状态的存储器系统,中断等待仅为12个周期,。中断和多个异常可由软件触发。
- 多个优化用于降低不同异常上下文切换时的中断处理开销。中断/异常屏蔽功能可以将所有的中断和异常(NMI除外)屏蔽掉,或者将中断/异常屏蔽为某个优先级之下。
为了支持这些特性,NVIC 使用了多个可编程寄存器。这些寄存器经过了存储器映射,而 CMSIS-Core 则为大多数常见的中断控制任务提供了所需的寄存器定义和访问函数(API)这些访问函数易于使用,而且多数可用于 Cortex-M0 等其他 Cortex-M 处理器。
向量表为系统存储器的一部分,其中存有中断和系统异常的起始地址。向量表默认位于存储器空间的开头(地址0x0),不过,若需要,向量表偏移可以在运行时变为其他值。对于大多数应用程序,向量表可以在编译时被设置为应用程序映像的一部分,且在运行时保持不变。
3.7 OS支持和系统级特性
Cortex-M3/M4 处理器在设计时就考虑了对嵌人式 OS 的高效支持。它们具有一个内置的系统节拍定时器 SysTick,可以为 OS 定时提供周期性定时中断。由于SysTick 定时器在所有的 Cortex-M3 和Cortex-M4 设备中都存在,嵌入式 OS 的源代码可以很容易地就能用在所有的这些设备上,而无须为设备相关的定时器进行修改。
Cortex-M3/M4 具有两个栈指针:
- OS内核和中断用的主栈指针(MSP)
- 应用任务用的进程栈指针(PSP)
这样,OS 内核用的栈就和应用任务的栈分离开来了,可靠性得到提高的同时,栈空间的使用也得到了优化。没有 OS 的简单应用可以只使用 MSP。为了进一步提高可靠性,Cortex-M3/M4 支持独立的特权和非特权操作模式,处理器在启动后默认处于特权模式。当使用 OS 且执行用户任务时,用户任务可以在非特权操作模式中执行,这样可以增强某些限制,如阻止对一些 NVIC 寄存器的访问。特权和非特权操作模式也可以同 MPU 一道,防止非特权任务访问某些存储器区域。这样,用户任务就无法破坏 OS 内核以及其他任务的数据,因此,也就提高了系统的稳定性。
大多数简单的应用根本不会使用非特权模式,不过在构建需要高可靠性的嵌入式系统时通过特权和非特权任务的分离,当某个非特权任务出错后,系统可能还会继续执行。Cortex-M 处理器还具有一些错误处理。当检测到一个错误时(例如,访问非法存储器地址),错误异常就会被触发,这样,可以避免进一步的系统错误,并且可以分析问题。
3.8 Cortex-M4的特殊性
Cortex-M4 处理器在很多方面都和 Cortex-M3 类似。不过,它还具有 Cortex-M3 中不存在的一些特性,其中,包括 DSP 扩展和可选的单精度浮点单元。
Cortex-M4 的 DSP 扩展包括:
- 8 位和 16 位单指令多数据(SIMD)指令。这些指令允许多个数据操作的并行执行。SIMD 最常用的应用为音频处理,其左右声道的计算可以同时执行。它还可用于图像处理,图形像素的 R-G-B 或 C-M-Y-K 元素可以用 8 位 SIMD 数据表示,且可以并行处理。
- 支持多个饱和运算指令,其中,包括SIMD形式的,这样可以避免在出现上溢/下溢时,计算结果产生大的畸变。
- 单周期 16 位、双 16 位以及 32 位乘累加(MAC)。尽管 Cortex-M3 也支持几个 MAC 指令,而 Cortex-M4 的 MAC 指令则具有更多选项,其中,包括寄存器的高低 16 位多种组合的乘法以及SIMD 形式的 16 位 MAC。另外,Cortex-M4 处理器中的 MAC 运算可以在单周期内完成,而 Cortex-M3 则需要花费几个周期。
Cortex-M4 中可选的浮点单元(FPU)则包括:
- 符合 IEEE754 标准的单精度浮点单元。为了应对浮点运算,Cortex-M4 处理器支持多个浮点指令,同样还存在多个指令可用于单精度和半精度浮点数据间的转换。
- 浮点单元支持融合 MAC 运算,它可以提高 MAC 结果的精度。
- 若不需要浮点单元就可以将它关闭,这样可以降低功耗。
为了支持额外的指令以及满足 DSP 的高性能需求,Cortex-M4 内部的数据通路和 Cortex-M3 处理器不同。由于这些差异,Cortex-M4 的一些指令所花费的时钟周期要少。
为了全部发挥 Cortex-M4 中 DSP 部分的作用,ARM 通过 CMSIS-DSP 项目提供了一个 DSP 库。该库是免费的,可用于 Cortex-M4、Cortex-M3 处理器,甚至 Cortex-M0+ 及 Cortex-M0 处理器也可以使用。
3.10 调试支持
Cortex-M3/M4 处理器具有丰富的调试特性,可以降低软件开发的难度。除了暂停和单步等标准的调试特性外,在无须昂贵设备的前提下,还可以利用跟踪特性查看程序执行的细节。
Cortex-M3/M4 处理器的 Flash 补丁和断点单元(FPB)中存在最多 8 个用于断点的硬件比较器(6 个用于指令地址,2个用于数据地址)。在触发时,处理器可被暂停,或将传输重映射到 SRAM 区域。利用重映射特性,只读的存储器位置也可以被修改,例如,可以利用一小块可编程存储器为掩膜 ROM 补上部分程序。这样,即使主程序代码位于掩膜 ROM 中,也可以修正代码错误或者进行改进。
Cortex-M3/M4 处理器的数据监视点和跟踪(DWT)单元中还存在最多 4 个硬件数据监视点比较器。在访问所选择的数据时,这些比较器会产生监视点事件并暂停处理器,或者在无须暂停处理器的情况下产生可由跟踪接口收集的跟踪信息。集成开发环境(IDE)中的调试器可以将数据值和其他信息呈现出来,并将数据值的改变图像化。DWT可用于产生异常事件跟踪和基本概况信息,也通过跟踪接口输出。
Cortex-M3/M4 处理器还具有一个可选的嵌人式跟踪宏单元(ETM)模块,其可用于产生指令跟踪。通过该模块可以查看执行过程中的程序流,它在调试复杂软件时非常重要,而且还可用于详细概况和代码盖分析。
Cortex-M3/M4 处理器的调试可以通过两种接口实现:
- JTAG连接或名为串行线调试
- (SWD)的两线接口
许多开发工具供应商都同时支持 JTAG 和 SWD 协议。跟踪信息可以由单线的串行线查看(SWV)接口收集,或者若所需的跟踪带宽较大时(如使用指令跟踪时),也可以使用一种跟踪端口接口(一般为5针)。跟踪和调试接口可以合并到一个接头中。
3.11 可扩展性
Cortex-M 处理器并非仅用于低成本的微控制器产品。
目前,可以发现不少多处理器产品中都包含 Cortex-M3/M4 处理器。其中包括:
- 具有多个 Cortex-M 处理器的微控制器,如 NXP 的 LPC4300。
- 在具有一个或多个 Cortex-M 处理器的高端数字信号处理设备中,用作主处理器或额外的 DSP数据处理引擎,如 TexasInstruments 的 Concerto 产品系列就将一个 Cortex-M3 处理器与 DSP 内核放在了一起。
- 在具有一个或多个 Cortex-M 处理器的复杂片上系统中,用作协处理器。例如,TexasInstruments 的 OMAP5 将一个 Cortex-A15 和两个 Cortex-M4 处理器放在一个器件中。
- 在具有一个或多个 Cortex-M 处理器的复杂片上系统中,用作电源管理或系统控制。
- 在具有一个或多个 Cortex-M 处理器的复杂片上系统中,充当有限状态机(FSM)。
利用 ARM Cortex-M 系统设计套件等多种 AMBA 总线架构解决方案,Cortex-M 处理器也可以支持多处理器系统。
另外,Cortex-M3/M4 处理器具有以下支持多处理器系统设计的特性:
- 排他访问指令。Cortex-M3 和 Cortex-M4 处理器支持多个排他访问指令,它们为成对出现的特殊的存储访问指令,用于信号量变量的加载和存储操作或手动排他操作。通过总线架构中增加的硬件支持,处理器可以确定对一个共享数据存储器区域的访问是否成功执行(例如,在操作期间没有其他的处理器访问同一区域)。
- 可扩展的调试支持。Cortex-M 处理器的调试系统基于 CoreSight 架构,可扩展对多处理器的支持,共用一个调试连接和跟踪接口。
- 事件通信接口。Cortex-M3/M4 处理器支持一种简单的事件通信接口,在多处理器系统中,可以让一些处理器进入休眠模式以降低功耗,而在某个处理器中的信号量操作完成等事件发生时,则可以将处理器唤醒。
可扩展性的另外一个方面体现在,对于可以找到的基于 Cortex-M 处理器的微控制器产品,由于所有的 Cortex-M 处理器在编程模型、中断处理和包括调试在内的软件开发方面都非常类似,因此可以很容易地为自己的嵌入式系统切换不同的处理器,以满足不同的性能、系统级和价格需求。
相关文章:
ARM Cortex-M3/M4 权威指南 笔记【一】技术综述
一、Cortex-M3/M4 处理器的一般信息 1.1 处理器类型 ARM Cortex-M 为 32 位 RISC(精简指令集)处理器,其具有: 32位寄存器32位内部数据通路32位总线接口 除了 32 位数据,Cortex-M 处理器(以及其他任何 A…...
【Qt】定期清理程序
在现有Qt程序中实现可配置日志保存天数的代码示例,分为界面修改、配置存储和核心逻辑三部分: // 1. 在配置文件(如settings.h)中添加保存天数的配置项 class Settings { public:int logRetentionDays() const {return m_settings…...
基于51单片机的门禁刷卡器proteus仿真
地址:https://pan.baidu.com/s/1j0KAmH5pVGWZWRpT6p5hBg 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectron…...
二、数据持久化篇(深度增强版)
二、数据持久化篇(深度增强版) 2.1 JDBC Template深度解析 架构设计思想 #mermaid-svg-y2IrKiVu2gzenoCB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-y2IrKiVu2gzenoCB .error-icon{fil…...
时间敏感和非时间敏感流量的性能保证配置
论文标题 中文标题: 时间敏感和非时间敏感流量的性能保证配置 英文标题: Provisioning of Time-Sensitive and non-Time-Sensitive Flows with Assured Performance 作者信息 Luis Velasco, Gianluca Graziadei, Sima Barzegar, Marc Ruiz Optical Co…...
k8s管理工具之lens
什么是lens Lens 是当前市场上最强大的K8S IDE。它是一个独立的单机应用,可以同时运行在macOS、Windows和Linux上。 作为K8S IDE,该有的它基本都有了! 集群管理 导入已有集群 首先,你需要在 Lens 中添加你的 Kubernetes 集群。点…...
kafka介绍,kafka集群环境搭建,kafka命令测试,C++实现kafka客户端
目录 kafka介绍kafka集群环境搭建zookeeper安装与配置kafka安装与配置 kafka命令测试C实现kafka客户端librdkafka库编译新版本cmake编译cppkafka库编译C实现kafka生产者和消费者客户端 kafka介绍 定义与概述 Apache Kafka 是一个开源的分布式流处理平台,最初由 Lin…...
DeepSeek的蒸馏技术:让模型推理更快
DeepSeek系列模型,如DeepSeek-R1-Distill-Qwen-7B,采用了知识蒸馏(Knowledge Distillation)技术,这是一种强大的模型压缩和优化方法。通过蒸馏,DeepSeek模型在保持甚至提升性能的同时,实现了更快…...
SAP-ABAP:dialog界面中的数据块Event Block详解举例
在SAP的Dialog程序开发中,Event Block(事件块)是屏幕流逻辑(Flow Logic)中的关键部分,用于定义屏幕在特定事件触发时执行的逻辑。Event Block通常与ABAP模块(Module)结合使用&#x…...
微信小程序 - 模版语法
声明和绑定数据 小程序页面中使用的数据均需要在 Page() 方法的 data 对象中进行声明定义 在将数据声明好以后,需要在 WXML 中绑定数据,数据绑定最简单的方式是使用 Mustache 语法(双大括号)将变量包起来。 在 {{ }} 内部可以做…...
mapbox进阶,添加绘图扩展插件,裁剪线
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️MapboxDraw 绘图控件二、🍀添加绘图扩…...
Dav_笔记14:优化程序提示 HINTs -2
优化方法和目标的提示 ALL_ROWS和FIRST_ROWS(n)提示允许您在优化方法和目标之间进行选择。如果SQL语句具有指定优化方法和目标的提示,则优化程序将使用指定的方法,无论是否存在统计信息,OPTIMIZER_MODE初始化参数的值…...
Oracle ORA-00054
ORA-00054: resource busy and acquire with NOWAlT specified or timeout expire 错误 ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired 是 Oracle 数据库中常见的一个错误,通常发生在尝试获取一个已经被其他会话占用的资源时。这…...
ABB能源自动化选用宏集Cogent DataHub避免DCOM问题,实现高效、安全的数据传输
案例概况 ABB能源自动化公司通过宏集Cogent DataHub软件将电厂设施的数据实时传输到公司办公室,实现了OPC隧道/镜像解决方案,在电厂和公司网络之间建立了一个安全、可靠的连接,确保数据传输的高度安全,减少入侵风险。 ࿰…...
IP地址有哪些类型?
IP地址是计算机网络中用来识别和查找设备的唯一标识符。根据其作用和使用范围,IP地址可分为以下几种类型: 1.局域网IP地址 局域网IP地址又称内网IP地址,是局域网内用来识别和查找局域网设备的地址。局域网是一个相对较小的网络,…...
网络安全评估:保障设备与系统安全的关键
保障网络安全离不开对入网设备的安全评估,这种评估运用了多种技术和手段,对网络中的设备与系统进行详尽的检查。它能迅速发现并排除潜在的安全风险,对网络系统的安全稳定运行具有极其关键的作用。 测评目的 确保网络系统的安全与稳定是网络…...
一竞技瓦拉几亚S4预选:YB 2-0击败GG
在2月11号进行的PGL瓦拉几亚S4西欧区预选赛上,留在欧洲训练的YB战队以2-0击败GG战队晋级下一轮。双方对阵第二局:对线期YB就打出了优势,中期依靠卡尔带队进攻不断扩大经济优势,最终轻松碾压拿下比赛胜利,以下是对决战报。 YB战队在天辉。阵容是潮汐、卡尔、沙王、隐刺、发条。G…...
管式超滤膜分离技术在茶澄清浓缩领域的创新应用
管式超滤膜分离技术在茶澄清浓缩领域展现出广阔的前景,其独特优势和应用效果正逐渐改变着茶饮料行业的生产方式。以下是几个关键点,说明了这一技术为何具有如此积极的发展潜力: 1. 高效澄清与保留风味 管式超滤膜具有高精度的过滤能力&#x…...
maven web项目如何定义filter
在 Maven Web 项目中定义一个 Servlet 过滤器(Filter),需要遵循 Java Servlet 规范,并利用 Maven 来管理项目结构和依赖。下面是如何在 Maven Web 项目中定义和配置一个过滤器的基本步骤: 1. 创建过滤器类 首先&…...
如何在MacOS上查看edge/chrome的扩展源码
步骤 进入管理扩展页面点击详细信息复制对应id在命令行键入 open ~/Library/Application Support/Microsoft Edge/Default/Extensions/${你刚刚复制的id} 即可打开访达中对应的更目录 注意 由于原生命令行无法直接处理空格 ,所以需要加转义符\,即:open ~/Librar…...
【学术投稿-2025年计算机视觉研究进展与应用国际学术会议 (ACVRA 2025)】CSS样式解析:行内、内部与外部样式的区别与优先级分析
简介 2025年计算机视觉研究进展与应用(ACVRA 2025)将于2025年2月28-3月2日在中国广州召开,会议将汇聚世界各地的顶尖学者、研究人员和行业专家,聚焦计算机视觉领域的最新研究动态与应用成就。本次会议将探讨前沿技术,…...
redis记录用户在线状态+活跃度
1.记录用户在线状态 redis的Bitmap记录用户在线状态 使用一个大的Bitmap,每个bit位对应一个用户IDbit值1表示在线,0表示离线用户ID与bit位的映射关系: bit位置 用户ID % bitmap容量 具体实现: # 用户上线时,设置对应bit为1 SETBIT online_users {user_id} 1# 用户下线时,设…...
vmware安装win7
1、版本说明 vmware workstation 16 win7 X64 2、安装步骤 安装步骤有点独特,先配置虚拟机,然后再虚拟机的虚拟光驱里添加下载的win7。 配置完了之后,点击要运行的虚拟机,然后一直往下走就可以完成系统的安装。 3、配置系统以解…...
OpenAI推出的Computer Use智能体:Operator是什么
OpenAI推出的Computer Use智能体:Operator是什么 是一款能像人一样与图形用户界面交互来操作计算机的AI智能体。以下是其核心原理及举例说明: 核心原理 感知: 屏幕截图获取:利用高性能屏幕捕获模块,如基于WebRTC的截图技术,以极低延迟获取高清晰度页面图像,为后续分析…...
[FastAdmin] 上传图片并加水印,压缩图片
1.app\common\library\Upload.php 文件 upload方法 /*** 普通上传* return \app\common\model\attachment|\think\Model* throws UploadException*/public function upload($savekey null){if (empty($this->file)) {throw new UploadException(__(No file upload or serv…...
二、k8s项目的生命周期
项目的生命周期 创建-----------》发布-----------》更新--------》回滚----------》删除 kubectl create deployment nginx1 --imagenginx:1.22 --replicas3 基于deployment控制器创建pod 控制器的名称是nginx1 pod使用的镜像:nginx:1.22 --replicas3 pod的数量有多少 3个…...
MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 基础篇 part 10
第10章_创建和管理表 DDL:数据定义语言。CREATE \ALTER\ DROP \RENAME TRUNCATE DML:数据操作语言。INSERT \DELETE \UPDATE \SELECT(重中之重) DCL:数据控制语言。COMMIT \…...
python自动化测试之Pytest框架之YAML详解以及Parametrize数据驱动!
一、YAML详解 YAML是一种数据类型,它能够和JSON数据相互转化,它本身也是有很多数据类型可以满足我们接口 的参数类型,扩展名可以是.yml或.yaml 作用: 1.全局配置文件 基础路径,数据库信息,账号信息&…...
deepseek的CoT优势、两阶段训练的有效性学习笔记
文章目录 1 DeepSeek的CoT思维链的优势1.2 open-r1的CoT训练数据1.3 ReAct任务与CoT任务适用场景 2 AI推理方向:deepseek与deepmind的两条路线的差异2.1 PRM与ORM的两大学派分支的差异2.2 DeepSeek-R1的两阶段训练概述 1 DeepSeek的CoT思维链的优势 DeepSeek跟之前…...
计算机网络-MPLS转发原理
在上一篇关于 MPLS 基础的文章中,我们了解了 MPLS 的基本概念、术语以及它在网络中的重要性。今天,我们将深入探讨 MPLS 转发的原理与流程,帮助大家更好地理解 MPLS 是如何在实际网络中工作的。 一、MPLS 转发概述 MPLS 转发的本质是将数据…...
本地部署DeepSeek R1并搭建Web UI实现可视化交互的笔记
经过多天的挣扎和卸载了一些软件,终于下定决心在本地部署DeepSeek R1模型。部署和搭建过程非常简单和方便。 一、下载Ollama 进入Ollama官方网站(https://ollama.com),进入下载下载Ollama页面(https://ollama.com/download) 根据电脑的操作…...
港中文腾讯提出可穿戴3D资产生成方法BAG,可自动生成服装和配饰等3D资产如,并适应特定的人体模型。
今天给大家介绍一种名为BAG(Body-Aligned 3D Wearable Asset Generation)的新方法,可以自动生成可穿戴的3D资产,如服装和配饰,以适应特定的人体模型。BAG方法通过构建一个多视图图像扩散模型,生成与人体对齐…...
JUC并发—1.Java集合包底层源码剖析
大纲 1.为什么要对JDK源码剖析 2.ArrayList源码一:基本原理以及优缺点 3.ArrayList源码二:核心方法的原理 4.ArrayList源码三:数组扩容以及元素拷贝 5.LinkedList源码一:优缺点和使用场景 6.LinkedList源码二:双…...
使用Java爬虫获取京东商品评论API接口(JD.item_review)数据
一、引言 在电商领域,商品评论是用户决策的重要参考依据,也是商家优化产品和服务的重要数据来源。京东作为国内领先的电商平台,提供了丰富的API接口供开发者使用,其中JD.item_review接口可以获取商品的评论数据。通过这些数据&am…...
问卷数据分析|SPSS实操之单因素方差分析
适用条件: 检验分类变量和定量变量之间的差异 分类变量数量要大于等于三 具体操作: 1.选择分析--比较平均值--单因素ANOVA检验 2. 下方填分类变量,上方为各个量表数据Z1-Y2 3. 点击选项,选择描述和方差齐性检验 4.此处为结果数…...
【自然语言处理】TextRank 算法提取关键词、短语、句(Python源码实现)
文章目录 一、TextRank 算法提取关键词 [工具包]二、TextRank 算法提取关键短语[工具包]三、TextRank 算法提取关键句[工具包]四、TextRank 算法提取关键句(Python源码实现) 一、TextRank 算法提取关键词 [工具包] 见链接 【自然语言处理】TextRank 算法…...
Git的常用命令及常见问题处理方法
目录 一、介绍二、常用 Git 命令1. 配置用户信息2. 初始化仓库3. 克隆远程仓库4. 查看状态5. 添加文件到暂存区6. 提交更改7. 查看提交历史8. 查看文件差异9. 查看分支10. 切换分支11. 合并分支12. 处理冲突13. 远程操作14. 标签管理15. 撤销操作 三、常见问题处理方法1. 无法推…...
第6章 6.1 ASP.NET Core MVC 项目
6.1.1 ASP.NET Core MVC 项目的搭建 进入VS环境,创建新的项目,选择【ASP.Net Core Web 应用(模型-视图-控制器)】如下图所示 编写项目名称 点击创建,进入项目后结构如下所示 wwwroot 文件夹为图片、JS、CSS等静态文件…...
ios通过xib创建控件
之前写过ios动态创建控件及添加事件,纯手工代码写控件,虽然比较灵活,但是就是代码量比较多。这次我们通过xib来创建app下载列表项 AppView.xib。一个imageview,一个label,一个button构成 1.创建AppView.xib 2.再创建xib对应的mode࿰…...
缓存组件<keep-alive>
缓存组件<keep-alive> 1.组件作用 组件, 默认会缓存内部的所有组件实例,当组件需要缓存时首先考虑使用此组件。 2.使用场景 场景1:tab切换时,对应的组件保持原状态,使用keep-alive组件 使用:KeepAlive | Vu…...
SAP ABAP调用DeepSeek API大模型接口
搜索了一下DeepSeek,发现有人已经实现了SAP的对接, 不登录网页,SAP如何使用DeepSeek快速编程,ABAP起飞啦~ 按照对应的注册流程和方法。总算做出了第一个能够直连DeepSeek的API abap程序。 效果不错。 report ZTOOL_ABAP_CALL_D…...
大数据与大模型:数字时代的共生力量
引言:大数据与大模型的崭新时代 在数字化浪潮汹涌澎湃的当下,大数据与大模型无疑是最为耀眼的两颗明星 ,深刻地改变着我们的生活、工作和思维方式。大数据,作为信息时代的宝藏,蕴含着无尽的价值。从电商平台的海量交易…...
服务器使用宝塔面板Docker应用快速部署 DeepSeek-R1模型,实现Open WebUI访问使用
Deepseek这段时间非常火,最新推理模型Deepseek R1,都想装上试一试,特别是部署到服务器教程网上一堆教程好像没几个部署成功靠谱的,先说服务器上下载Ollama就难倒一堆人,每次都超时。今天终于在宝塔看到一篇 应用安装文…...
Qt - 地图相关 —— 3、Qt调用高德在线地图功能示例(附源码)
效果 作者其他相关文章链接: Qt - 地图相关 —— 1、加载百度在线地图(附源码) Qt - 地图相关 —— 2、Qt调用百度在线地图功能示例全集,包含线路规划、地铁线路查询等(附源码) Qt - 地图相关 —— 3、Qt调用…...
Idea集成deepseek生成代码
今天我带大家在idea上安装CodeGpt插件,这个插件可以根据我们的提示词生产代码,我们一起试试。 1、安装插件 打开idea,再点击setting菜单,按以下步骤操作。 安装完成后,一定要点击第四步“ok”。再次点击菜单setting…...
HTTP 请求方式`application/x-www-form-urlencoded` 与 `application/json` 怎么用?有什么区别?
HTTP 请求方式总结:application/x-www-form-urlencoded 与 application/json 在前后端交互中,客户端发送数据到服务器的常见方式有两种:application/x-www-form-urlencoded 和 application/json。本文将详细介绍这两种请求方式的特点、使用方…...
开发指南099-同时传递文件和参数
平台后台接口一般情况下要求传递一个json对象(对应后台需要一个继承RequestInfo的dto类),某些情况下需要同时传递文件和参数,该如何处理呢? 1、前端 const formData new FormData(); formData.append(file, this.f…...
【Pycharm+Git+Gitlab】安装部署(粗糙版)
1、安装Git 2、安装Pycharm(这里选择的是社区版) 3、桌面右键打开Git Bash 1)设置全局用户名(准备连接的Gitlab仓库的访问用户名) git config ---global user.name "username"2)设置全局邮箱&…...
k8s中部署nginx的pod
在当今数字化的浪潮中,容器编排技术成为了构建和管理应用程序的核心力量。Kubernetes(简称 k8s)作为容器编排领域的佼佼者,凭借其强大的自动化部署、扩展和管理能力,深受开发者和运维人员的青睐。而 Nginx 作为一款高性…...
kafka生产者之发送模式与ACK
文章目录 Kafka的发送模式Kafka的ack机制发送模式与ack的关联重试次数总结 在Kafka中,发送模式与ack机制紧密相关,它们共同影响着消息发送的可靠性和性能。 Kafka的发送模式 发后即忘(Fire and Forget):生产者发送消息…...