當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]ARM Cortex-M處理器家族現(xiàn)在有8款處理器成員。在本文中,我們會(huì)比較Cortex-M系列處理器之間的產(chǎn)品特性,重點(diǎn)講述如何根據(jù)產(chǎn)品應(yīng)用選擇正確的Cortex-M處理器。本文中會(huì)詳細(xì)的對(duì)照Cortex-M 系列處理器的指令集和高級(jí)中斷處理能力,以及 SoC系統(tǒng)級(jí)特性,調(diào)試和追蹤功能和性能的比較。

 1 簡介

今天, ARM Cortex-M 處理器家族有8款處理器成員。除此之外,ARM的產(chǎn)品系列還有很多其他的處理器成員。對(duì)很多初學(xué)者,甚至某些芯片設(shè)計(jì)經(jīng)驗(yàn)豐富但是不熟悉ARM系列處理器的設(shè)計(jì)者來說,也是很容易混淆這些產(chǎn)品的。不同的ARM 處理器有不同的指令集,系統(tǒng)功能和性能。本文會(huì)深入展現(xiàn)Cortex-M系列處理器之間的關(guān)鍵區(qū)別,以及它們和ARM其他系列處理器的不同。

1.1 ARM處理器家族

多年來, ARM已經(jīng)研發(fā)了相當(dāng)多的不同的處理器產(chǎn)品。 如下圖中(圖1): ARM 處理器產(chǎn)品分為經(jīng)典ARM處理器系列和最新的Cortex處理器系列。并且根據(jù)應(yīng)用范圍的不同,ARM處理器可以分類成3個(gè)系列。

Application Processors(應(yīng)用處理器)–面向移動(dòng)計(jì)算,智能手機(jī),服務(wù)器等市場的的高端處理器。這類處理器運(yùn)行在很高的時(shí)鐘頻率(超過1GHz),支持像Linux,Android,MS Windows和移動(dòng)操作系統(tǒng)等完整操作系統(tǒng)需要的內(nèi)存管理單元(MMU)。 如果規(guī)劃開發(fā)的產(chǎn)品需要運(yùn)行上述其中的一個(gè)操作系統(tǒng),你需要選擇ARM 應(yīng)用處理器.

Real-time Processors (實(shí)時(shí)處理器)–面向?qū)崟r(shí)應(yīng)用的高性能處理器系列,例如硬盤控制器,汽車傳動(dòng)系統(tǒng)和無線通訊的基帶控制。多數(shù)實(shí)時(shí)處理器不支持MMU,不過通常具有MPU、Cache和其他針對(duì)工業(yè)應(yīng)用設(shè)計(jì)的存儲(chǔ)器功能。實(shí)時(shí)處理器運(yùn)行在比較高的時(shí)鐘頻率(例如200MHz 到 >1GHz ),響應(yīng)延遲非常低。雖然實(shí)時(shí)處理器不能運(yùn)行完整版本的Linux和Windows操作系統(tǒng), 但是支持大量的實(shí)時(shí)操作系統(tǒng)(RTOS)。

Microcontroller Processors(微控制器處理器)–微控制器處理器通常設(shè)計(jì)成面積很小和能效比很高。通常這些處理器的流水線很短,最高時(shí)鐘頻率很低(雖然市場上有此類的處理器可以運(yùn)行在200Mhz之上)。 并且,新的Cortex-M處理器家族設(shè)計(jì)的非常容易使用。因此,ARM 微控制器處理器在單片機(jī)和深度嵌入式系統(tǒng)市場非常成功和受歡迎。

圖 1: 處理器家族

表1總結(jié)了三個(gè)處理器系列的主要特征。

表 1: 處理器特性總結(jié)

1.2 Cortex-M 處理器家族

Cortex-M處理器家族更多的集中在低性能端,但是這些處理器相比于許多微控制器使用的傳統(tǒng)處理器性能仍然很強(qiáng)大。例如,Cortex-M4和Cortex-M7處理器應(yīng)用在許多高性能的微控制器產(chǎn)品中,最大的時(shí)鐘頻率可以達(dá)到400Mhz。

當(dāng)然,性能不是選擇處理器的唯一指標(biāo)。在許多應(yīng)用中,低功耗和成本是關(guān)鍵的選擇指標(biāo)。因此,Cortex-M處理器家族包含各種產(chǎn)品來滿足不同的需求:

表 2: Cortex-M 處理器家族

不同于老的經(jīng)典ARM處理器(例如,ARM7TDMI, ARM9), Cortex-M處理器有一個(gè)非常不同的架構(gòu)。例如:

- 僅支持ARM Thumb®指令,已擴(kuò)展到同時(shí)支持16位和32位指令Thumb-2版本

- 內(nèi)置的嵌套向量中斷控制負(fù)責(zé)中斷處理,自動(dòng)處理中斷優(yōu)先級(jí),中斷屏蔽,中斷嵌套和系統(tǒng)異常處理。

- 中斷處理函數(shù)可以使用標(biāo)準(zhǔn)的C語言編程,嵌套中斷處理機(jī)制避免了使用軟件判斷哪一個(gè)中斷需要響應(yīng)處理。同時(shí),中斷響應(yīng)速度是確定性的,低延遲的

- 向量表從跳轉(zhuǎn)指令變?yōu)橹袛嗪拖到y(tǒng)異常處理函數(shù)的起始地址。

- 寄存器組和某些編程模式也做了改變。

這些變化意味著許多為經(jīng)典ARM處理器編寫的匯編代碼需要修改,老的項(xiàng)目需要修改和重新編譯才能遷移到Cortex-M的產(chǎn)品上。軟件移植具體的細(xì)節(jié)記錄在ARM文檔:

ARM Cortex-M3 Processor Software Development for ARM7TDMI Processor Programmers

http://www.arm.com/files/pdf/Cortex-M3_programming_for_ARM7_developers.pdf

1.3 Cortex-M系列處理器的共同特性

Cortex-M0, M0+, M3, M4 and M7之間有很多的相似之處,例如:

- 基本編程模型 (章節(jié) 3.1)

- 嵌套向量中斷控制器(NVIC)的中斷響應(yīng)管理

- 架構(gòu)設(shè)計(jì)的休眠模式:睡眠模式和深度睡眠模式 (章節(jié) 4.1)

- 操作系統(tǒng)支持特性 (章節(jié) 3.3)

- 調(diào)試功能 (章節(jié) 6)

- 易用性

例如,嵌套向量中斷控制器是內(nèi)置的中斷控制器

圖 2: Cortex-M處理器的嵌套向量中斷控制器

支持許多外圍設(shè)備的中斷輸入,一個(gè)不可屏蔽的中斷請(qǐng)求,一個(gè)來自內(nèi)置時(shí)鐘(SysTick)的中斷請(qǐng)求(見章節(jié) 3.3)和一定數(shù)量的系統(tǒng)異常請(qǐng)求。NVIC處理這些中斷和異常的優(yōu)先級(jí)和屏蔽管理。

NVIC以及異常處理模型的更多的內(nèi)容在章節(jié)3.2描述。其他Cortex-M處理器間的異同點(diǎn)會(huì)在本文的其余部分講解。

2 Cortex-M處理器指令集

2.1 指令集簡介

大多數(shù)情況下,應(yīng)用程序代碼可以用C或其他高級(jí)語言編寫。但是,對(duì)Cortex-M 處理器支持指令集的基本了解有助于開發(fā)者針對(duì)具體應(yīng)用選擇合適的Cortex-M處理器。指令集(ISA)是處理器架構(gòu)的一部分,Cortex-M處理器可以分為幾個(gè)架構(gòu)規(guī)范

表 3: Cortex-M 處理器ARM架構(gòu)規(guī)范的規(guī)范

所有的Cortex-M 處理器都支持Thumb指令集。整套Thumb指令集擴(kuò)展到Thumb-2版本時(shí)變得相當(dāng)大。但是,不同的Cortex-M處理器支持不同的Thumb 指令集的子集,如圖3所示

圖 3: Cortex-M 處理器的指令集

2.2 Cortex-M0/M0+/M1指令集

Cortex-M0/M0+/M1處理器基于ARMv6-M架構(gòu)。這是一個(gè)只支持56條指令的小指令集,大部分指令是16位指令,如圖3所示只占很小的一部分。但是,此類處理器中的寄存器和處理的數(shù)據(jù)長度是32位的。對(duì)于大多數(shù)簡單的I/O控制任務(wù)和普通的數(shù)據(jù)處理,這些指令已經(jīng)足夠了。這么小的指令集可以用很少的電路門數(shù)來實(shí)現(xiàn)處理器設(shè)計(jì),Cortex-M0 和 Cortex-M0+最小配置僅僅12K門。然而,其中的很多指令無法使用高位寄存器(R8 到R12), 并且生成立即數(shù)的能力有限。這是平衡了超低功耗和性能需求的結(jié)果。

2.3 Cortex-M3指令集

Cortex-M3處理器是基于ARMv7-M架構(gòu)的處理器,支持更豐富的指令集,包括許多32位指令,這些指令可以高效的使用高位寄存器。另外,M3還支持:

查表跳轉(zhuǎn)指令和條件執(zhí)行(使用IT指令)

硬件除法指令

乘加指令(MAC)

各種位操作指令

更豐富的指令集通過幾種途徑來增強(qiáng)性能;例如,32位Thumb指令支持了更大范圍的立即數(shù),跳轉(zhuǎn)偏移和內(nèi)存數(shù)據(jù)范圍的地址偏移。支持基本的DSP操作(例如,支持若干條需要多個(gè)時(shí)鐘周期執(zhí)行的MAC指令,還有飽和運(yùn)算指令)。最后,這些32位指令允許用單個(gè)指令對(duì)多個(gè)數(shù)據(jù)一起做桶型移位操作。

支持更豐富的指令導(dǎo)致了更大的面積成本和更高的功耗。典型的微控制器,Cortex-M3的電路門數(shù)是Cortex-M0 和 Cortex-M0+兩倍還多。但是,處理器的面積只是大多數(shù)現(xiàn)代微控制器的很小的一部分,多出來的面積和功耗經(jīng)常不那么重要。

2.4 Cortex-M4指令集

Cortex-M4在很多地方和Cortex-M3相同:流水線,編程模型。Cortex-M4支持Cortex-M3的所有功能,并額外支持各種面向DSP應(yīng)用的指令,像SIMD, 飽和運(yùn)算指令,一系列單周期MAC指令(Cortex-M3只支持有限條MAC指令,并且是多周期執(zhí)行的),和可選的單精度浮點(diǎn)運(yùn)算指令。

Cortex-M4的SIMD操作可以并行處理兩個(gè)16位數(shù)據(jù)和4個(gè)8位數(shù)據(jù)。例如,圖4展示的QADD8 和 QADD16 操作:

圖 4: SIMD指令例子: QADD8 and QADD16

The uses of SIMD enable much faster computation of 16-bit and 8-bit data in certain DSP operations as the calculation can be parallelized. However, in general programming, C compilers are unlikely to utilize the SIMD capability. That is why the typical benchmark results of the Cortex-M3 and Cortex-M4. However, the internal data path of the Cortex-M4 is different from Cortex-M3, which enable faster operations in a few cases (e.g. single cycle MAC, and allow write back of two registers in a single cycle).在某些DSP運(yùn)算中,使用SIMD可以加速更快計(jì)算16位和8位數(shù)據(jù),因?yàn)檫@些運(yùn)算可以并行處理。但是,一般的編程中,C編譯器并不能充分利用SIMD運(yùn)算能力。這是為什么Cortex-M3 和 Cortex-M4典型benchmark的分?jǐn)?shù)差不多。然而,Cortex-M4的內(nèi)部數(shù)據(jù)通路和Cortex-M3的不同,某些情況下Cortex-M4可以處理的更快(例如,單周期MAC,可以在一個(gè)周期中寫回到兩個(gè)寄存器)。

2.5 Cortex-M7指令集

Cortex-M7支持的指令集和Cortex-M4相似,添加了:

· 浮點(diǎn)數(shù)據(jù)架構(gòu)是基于FPv5的,而不是Cortex-M4的FPv4,所以Cortex-M7支持額外浮點(diǎn)指令

· 可選的雙精度浮點(diǎn)數(shù)據(jù)處理指令

· 支持緩存數(shù)據(jù)預(yù)取指令(PLD)

Cortex-M7的流水線和Cortex-M4的非常不同。Cortex-M7是6級(jí)雙發(fā)射流水線,可以獲得更高的性能。多數(shù)為Cortex-M4設(shè)計(jì)的軟件可以直接運(yùn)行在Cortex-M7上。但是,為了充分利用流水線差異來達(dá)到最好的優(yōu)化,軟件需要重新編譯,并且在許多情況下,軟件需要一些小的升級(jí),以充分利用像Cache這樣的新功能。

2.6 Cortex-M23指令集

Cortex-M23的指令集是基于ARMv8-M的Baseline子規(guī)范,它是ARMv6-M的超集。擴(kuò)展的指令包括:

· 硬件除法指令

· 比較和跳轉(zhuǎn)指令,32位跳轉(zhuǎn)指令

· 支持TrustZone安全擴(kuò)展的指令

· 互斥數(shù)據(jù)訪問指令(通常用于信號(hào)量操作)

· 16位立即數(shù)生成指令

· 載入獲取及存儲(chǔ)釋放指令(支持C11)

在某些情況下,這些增強(qiáng)的指令集可以提高處理器性能,并且對(duì)包含多個(gè)處理器的SoC設(shè)計(jì)有用(例如,互斥訪問對(duì)多處理器的信號(hào)量處理有幫助)

2.7 I Cortex-M33指令集

因?yàn)镃ortex-M33設(shè)計(jì)是非常可配置的,某些指令也是可選的。例如:

· DSP指令(Cortex-M4 和Cortex-M7支持的)是可選的

· 單精度浮點(diǎn)運(yùn)算指令是可選的,這些指令是基于FPv5的,并且比Cortex-M4多幾條。

: Cortex-M33也支持那些ARMv8-M Mainline引入的新指令:

· 支持TrustZone安全擴(kuò)展的指令

· 載入獲取及存儲(chǔ)釋放指令(支持C11)

2.8 指令集特性比較總結(jié)

ARMv6-M, ARMv7-M 和 ARMv8-M架構(gòu)有許多指令集功能特點(diǎn), 很難介紹到所有的細(xì)節(jié)。但是,下面的表格(表4)總結(jié)了那些關(guān)鍵的差異。

表 4: 指令集特性總結(jié)

Cortex-M處理器指令集的最重要的特點(diǎn)是向上兼容。Cortex-M3的指令是Cortex-M0/M0+/M1的超集。所以,理論上講,如果存儲(chǔ)空間分配是一致的,運(yùn)行在Cortex-M0/M0+/M1上的二進(jìn)制文件可以直接運(yùn)行在Cortex-M3上。同樣的原理也適用于Cortex-M4/M7和其他的Cortex-M處理器;Cortex-M0/M0+/M1/M3支持的指令也可以運(yùn)行在Cortex-M4/M7上。

雖然Cortex-M0/M0+/M1/M3/M23處理器沒有浮點(diǎn)運(yùn)算單元配置選項(xiàng),但是處理器仍然可以利用軟件來做浮點(diǎn)數(shù)據(jù)運(yùn)算。這也適用于基于Cortex-M4/M7/M33但是沒有配置浮點(diǎn)運(yùn)算單元的產(chǎn)品。在這種情況下,當(dāng)程序中使用了浮點(diǎn)數(shù),編譯工具包會(huì)在鏈接階段插入需要的運(yùn)行軟件庫。軟件模式的浮點(diǎn)運(yùn)算需要更長的運(yùn)行時(shí)間,并且會(huì)略微的增加代碼大小。但是,如果浮點(diǎn)運(yùn)算不是頻繁使用的,這種方案是適合這種應(yīng)用的。

3 架構(gòu)特性

3.1 編程模型

Cortex-M處理器家族的編程模型是高度一致的。例如所有的Crotex-M處理器都支持R0到R15,PSR, CONTROL 和 PRIMASK。兩個(gè)特殊的寄存器— FAULTMASK 和 BASEPRI—只有Cortex-M3, Cortex-M4, Cortex-M7 和 Cortex-M33支持;浮點(diǎn)寄存器組和FPSCR(浮點(diǎn)狀態(tài)和控制寄存器)寄存器,是Cortex-M4/M7/M33可選的浮點(diǎn)運(yùn)算單元使用的。

圖 5: 編程模型

BASEPRI寄存器允許程序阻止指定優(yōu)先級(jí)或者低的優(yōu)先級(jí)中斷和異常。對(duì)ARMv7-M來說這是很重要的,因?yàn)镃ortex-M3, Cortex-M4, Cortex-M7 和 Cortex-M33有大量的優(yōu)先級(jí)等級(jí),而ARMv6-M 和 ARMv8-M Baseline只有有限的4個(gè)優(yōu)先等級(jí)。FAULTMASK通常用在復(fù)雜的錯(cuò)誤處理上(查看章節(jié)3.4)

非特權(quán)級(jí)別的實(shí)現(xiàn)對(duì)ARMv6-M處理器是可選的,對(duì)ARMv7-M 和ARMv8-M處理器一直支持的。對(duì)Cortex-M0+處理器,它是可選的, Cortex-M0 and Cortex-M1不支持這個(gè)功能。這意味著在各種Cortex-M處理器的CONTROL 寄存器是稍微不同的。FPU的配置也會(huì)影響到CONTROL寄存器,如圖6所示。

圖 6: CONTROL 寄存器

另外一個(gè)編程模型之間的不同是PSR寄存器(程序狀態(tài)寄存器)的細(xì)節(jié)。所有的Cortex-M處理器,PSR寄存器都被再分成應(yīng)用程序狀態(tài)寄存器(APSR),執(zhí)行程序狀態(tài)寄存器(EPSR)和中斷程序狀態(tài)寄存器(IPSR)。 ARMv6-M 和 ARMv8-M Baseline系列的處理器不支持APSR的Q位和EPSR的ICI/IT位。ARMv7E-M系列 ( Cortex-M4, Cortex-M7) 和ARMv8-M Mainline (配置了DSP擴(kuò)展的Cortex-M33 )支持GE位。另外,ARMv6-M系列處理器IPSR的中斷號(hào)數(shù)字范圍很小,如圖7所示。

圖 7: PSR 差異

請(qǐng)注意Cortex-M的編程模型和ARM7TDMI等這些經(jīng)典的ARM處理器是不一樣的。除了寄存器組不同外,經(jīng)典ARM處理器中“模式”和“狀態(tài)”的定義與Cortex-M中的也是不同的。Cortex-M只有兩個(gè)模式:線程模式(Thread)和管理者模式(Handler),并且Cortex-M處理器一直運(yùn)行在Thumb狀態(tài)(不支持ARM指令)

3.2 異常處理模型和嵌套向量中斷控制器NVIC

所有的Cortex-M處理器都包含了NVIC模塊,采用同樣的異常處理模型。如果一個(gè)異常中斷發(fā)生,它的優(yōu)先等級(jí)高于當(dāng)前運(yùn)行等級(jí),并且沒有被任何的中斷屏蔽寄存器屏蔽,處理器會(huì)響應(yīng)這個(gè)中斷/異常,把某些寄存器入棧到當(dāng)前的堆棧上。這種堆棧機(jī)制下,中斷處理程序可以編寫為一個(gè)普通的C函數(shù),許多小的中斷處理函數(shù)可以立即直接響應(yīng)工作而不需要額外的堆棧處理花銷。

一些ARMv7-M/ARMv8-M Mainline系列的處理器使用的中斷和系統(tǒng)異常并不被ARMv6-M/ARMv8-M Baseline的產(chǎn)品支持,如圖8. 例如,Cortex-M0, M0+ 和M1的中斷數(shù)被限制在32個(gè)以下,沒有調(diào)試監(jiān)測異常,錯(cuò)誤異常也只限于HardFault(錯(cuò)誤處理細(xì)節(jié)請(qǐng)參看章節(jié)3.4)。相比之下,Cortex-M23, Cortex-M3, Cortex-M4 和Cortex-M7處理器可以支持到多達(dá)240個(gè)外圍設(shè)備中斷。Cortex-M33支持最多480個(gè)中斷。

另外一個(gè)區(qū)別是可以使用的優(yōu)先等級(jí)數(shù)量:

ARMv6-M 架構(gòu) - ARMv6-M支持2級(jí)固定的(NMI 和 HardFault)和4級(jí)可編程的(由每個(gè)優(yōu)先等級(jí)寄存器的兩個(gè)位表示)中斷/異常優(yōu)先級(jí)。這對(duì)大多數(shù)的微控制器應(yīng)用來說足夠了。

ARMv7-M 架構(gòu) - ARMv7-M系列處理器的可編程優(yōu)先級(jí)等級(jí)數(shù)范圍,根據(jù)面積的限制,可以配置成8級(jí)(3位)到256級(jí)(8位)。ARMv7-M處理器還有一個(gè)叫做中斷優(yōu)先級(jí)分組的功能,可以把中斷優(yōu)先級(jí)寄存器再進(jìn)一步分為組優(yōu)先級(jí)和子優(yōu)先級(jí),這樣可以詳細(xì)地制定搶占式優(yōu)先級(jí)的行為。

ARMv8-M Baseline – 類似 ARMv6-M,M23也有2位的優(yōu)先級(jí)等級(jí)寄存器。借助可選的TrustZone安全擴(kuò)展組件,安全軟件可以把非安全環(huán)境中的中斷的優(yōu)先等級(jí)轉(zhuǎn)換到優(yōu)先等級(jí)區(qū)間的下半?yún)^(qū),這就保證了安全環(huán)境中的某些中斷/異??偸潜确前踩h(huán)境中的優(yōu)先級(jí)要高。

ARMv8-M Mainline – 類似于 ARMv7-M。 可以支持8到256個(gè)中斷優(yōu)先等級(jí)和中斷優(yōu)先級(jí)分組。還支持ARMv8-M Baseline具有的優(yōu)先等級(jí)調(diào)整功能。

圖 8: Cortex-M 處理器異常中斷類型

所有的Cortex-M處理器在異常處理是都要依靠向量表。向量表保存著異常處理函數(shù)的起始地址(如圖8所示)。向量表的起始地址由名為向量表偏移寄存器(VTOR)決定。

· Cortex-M0+, Cortex-M3 and Cortex-M4 processors: by default the vector table is located in the starting of the memory map (address 0x0). Cortex-M0+, Cortex-M3 and Cortex-M4: 向量表默認(rèn)放在存儲(chǔ)空間的起始地址(地址 0x0)。

· In Cortex-M7, Cortex-M23 and Cortex-M33 processors: the default value for VTOR is defined by chip designers. Cortex-M23 and Cortex-M33 processors can have two separated vector tables for Secure and Non-secure exceptions/interrupts. Cortex-M7, Cortex-M23 and Cortex-M33:VTOR的初始值由芯片設(shè)計(jì)者定義。Cortex-M23 and Cortex-M33處理器面向安全和非安全的異常/中斷有兩個(gè)獨(dú)立的向量表。

· Cortex-M0 and Cortex-M1 does not implement programmable VTOR and vector table starting address is always 0x00000000. Cortex-M0 and Cortex-M1沒有實(shí)現(xiàn)可編程的VTOR,向量表起始地址一直為0x00000000。

Cortex-M0+ 和 Cortex-M23處理器的VTOR是可選項(xiàng)。如果VTOR被實(shí)現(xiàn)了,向量表的起始地址可以通過設(shè)置VTOR來改變,這個(gè)功能對(duì)下列情況有用:

重定位向量表到SRAM來實(shí)現(xiàn)動(dòng)態(tài)改變異常處理函數(shù)入口點(diǎn)

重定位向量表到SRAM來實(shí)現(xiàn)更快的向量讀取(如果flash存儲(chǔ)器很慢)

重定位向量表到ROM不同位置(或者Flash),不同的程序運(yùn)行階段可以有不同的異常處理程序

不同的Cortex-M處理器之間的NVIC編程模型也有額外的不同。差異點(diǎn)總結(jié)在表 5中:

表 5: NVIC 編程模型和特性差異

大部分情況下,對(duì)NVIC的中斷控制特性的操作都是通過CMSIS-CORE提供的APIs處理的,他們?cè)谖⒖刂破鲝S商提供的設(shè)備驅(qū)動(dòng)程序庫里。對(duì)Cortex-M3/M4/M7/M23/M33處理器,即使中斷被使能了,它的優(yōu)先級(jí)也可以被改變。ARMv6-M處理器不支持動(dòng)態(tài)優(yōu)先等級(jí)調(diào)整,當(dāng)你需要改變中斷優(yōu)先等級(jí)是,需要暫時(shí)的關(guān)掉這個(gè)中斷。

3.3 操作系統(tǒng)支持特性

Cortex-M處理器架構(gòu)在設(shè)計(jì)時(shí)就考慮到了操作系統(tǒng)的支持。針對(duì)操作系統(tǒng)的特性有:

影子堆棧指針

系統(tǒng)服務(wù)調(diào)用(SVC)和可掛起系統(tǒng)調(diào)用(PenSV)異常

SysTick – 24位遞減計(jì)時(shí)器,為操作系統(tǒng)的計(jì)時(shí)和任務(wù)管理產(chǎn)生周期性的異常中斷

Cortex-M0+/M3/M4/M7/M23/M33支持的非特權(quán)執(zhí)行和存儲(chǔ)保護(hù)單元(MPU)

系統(tǒng)服務(wù)調(diào)用(SVC)異常由SVC指令觸發(fā),他可以讓運(yùn)行在非特權(quán)狀態(tài)的應(yīng)用任務(wù)啟動(dòng)特權(quán)級(jí)的操作系統(tǒng)服務(wù)。可掛起系統(tǒng)調(diào)用異常在操作系統(tǒng)中像上下文切換這樣的非關(guān)鍵操作的調(diào)度非常有幫助。

為了能把Cortex-M1放到很小的FPGA器件中,所有用來支持操作系統(tǒng)的特性對(duì)Cortex-M1都是可選的。對(duì)Cortex-M0, Cortex-M0+ 和Cortex-M23處理器,系統(tǒng)時(shí)鐘SysTick是可選的。

通常,所有的Cortex-M處理器都支持操作系統(tǒng)。執(zhí)行在Cortex-M0+, Cortex-M3, Cortex-M4, Cortex-M7, Cortex-M23 和 Cortex-M33的應(yīng)用可以運(yùn)行在非特權(quán)運(yùn)行狀態(tài),并且可以同時(shí)利用可選的存儲(chǔ)器管理單元(MPU)以避免內(nèi)存非法訪問。這可以增強(qiáng)系統(tǒng)的魯棒性。

3.4 TrustZone安全擴(kuò)展

近幾年來, 物聯(lián)網(wǎng)(IoT)成為了嵌入式系統(tǒng)開發(fā)者們的熱門話題。IoT系統(tǒng)產(chǎn)品變得更加復(fù)雜,上市時(shí)間的壓力也與日俱增。嵌入式系統(tǒng)產(chǎn)品需要更好的方案來保證系統(tǒng)的安全,但是同時(shí)又要方便軟件開發(fā)者開發(fā)。傳統(tǒng)的方案是通過把軟件分成特權(quán)和非特權(quán)兩部分解決的,特權(quán)級(jí)軟件利用MPU防止非特權(quán)的應(yīng)用訪問包含安全敏感信息在內(nèi)的的關(guān)鍵的系統(tǒng)資源。這種方案對(duì)一些IoT系統(tǒng)非常適合,但是在一些情況下,只有兩層劃分是不夠的。特別是那些包含很多復(fù)雜特權(quán)級(jí)別的軟件組件的系統(tǒng),特權(quán)級(jí)的代碼的一個(gè)缺陷就可以導(dǎo)致黑客徹底的控制這個(gè)系統(tǒng)

ARMv8-M架構(gòu)包含了一個(gè)叫做TrustZone的安全擴(kuò)展,TrustZone導(dǎo)入了安全和非安全狀態(tài)的正交劃分。

· 普通應(yīng)用是非安全態(tài)

· 軟件組件和安全相關(guān)的資源(例如,安全存儲(chǔ),加密加速器,正隨機(jī)數(shù)發(fā)生器(TRNG))處在安全狀態(tài)。

圖 9: 安全狀態(tài)和非安全狀態(tài)的隔離

非安全狀態(tài)的軟件只能訪問非安全狀態(tài)的存儲(chǔ)空間和外圍設(shè)備,安全軟件可以訪問兩種狀態(tài)下的所有資源。

用這種方案,軟件開發(fā)者可以用以往的方式開發(fā)非安全環(huán)境下的應(yīng)用程序。同時(shí),他們可以借助芯片廠商提供的安全通訊軟件庫執(zhí)行安全物聯(lián)網(wǎng)連接。并且即使運(yùn)行在非安全環(huán)境的特權(quán)級(jí)的程序有漏洞,TrustZone安全機(jī)制可以阻止黑客控制整個(gè)設(shè)備,限制了攻擊的影響,還可以實(shí)現(xiàn)系統(tǒng)遠(yuǎn)程恢復(fù)。此外,ARMv8-M架構(gòu)也引入了堆棧邊界檢查和增強(qiáng)的MPU設(shè)計(jì),促使額外安全措施的采用。

安全架構(gòu)定義也擴(kuò)展到了系統(tǒng)級(jí)別,每個(gè)中斷都可以被設(shè)置為安全或者非安全屬性。中斷異常處理程序也會(huì)自動(dòng)保存和恢復(fù)安全環(huán)境中的寄存器數(shù)據(jù)以防止安全信息泄露。所以,TrustZone安全擴(kuò)展讓系統(tǒng)能夠支持實(shí)時(shí)系統(tǒng)的需求,為IoT應(yīng)用提供了堅(jiān)實(shí)的安全基礎(chǔ),并且容易讓軟件開發(fā)在此技術(shù)上開發(fā)應(yīng)用程序。

TrustZone模塊對(duì)Cortex-M23 and Cortex-M33處理器是可選的。關(guān)于ARMv8-M TrustZone更多的信息請(qǐng)查找The Next Steps in the Evolution of Embedded Processors for the Smart Connected Era。更多的TrustZone的資源請(qǐng)查看community.arm.com網(wǎng)站上的“TrustZone for ARMv8-M Community”,

3.5 錯(cuò)誤處理

ARM處理器和其他架構(gòu)的微控制器的一個(gè)區(qū)別是錯(cuò)誤處理能力。當(dāng)錯(cuò)誤被檢測到時(shí),一個(gè)錯(cuò)誤異常處理程序被觸發(fā)去執(zhí)行恰當(dāng)?shù)奶幚怼S|發(fā)錯(cuò)誤的情況可能是:

未定義的指令(例如,F(xiàn)lash存儲(chǔ)器損壞)

訪問非法地址空間(例如,堆棧指針崩潰)或者M(jìn)PU非法訪問

非法操作(例如,當(dāng)處理器已經(jīng)在優(yōu)先級(jí)高于SVC的中斷中試圖觸發(fā)SVC異常)

錯(cuò)誤處理機(jī)制使嵌入式系統(tǒng)能夠更快的響應(yīng)各種問題。否則,如果系統(tǒng)死機(jī)了,看門狗定時(shí)需要非常長的時(shí)間重啟系統(tǒng)。

ARMv6-M架構(gòu)中,所有的錯(cuò)誤事件都會(huì)觸發(fā)HardFault處理程序,它的優(yōu)先級(jí)是-1(優(yōu)先級(jí)比所有的可編程異常都高,但是僅低于非屏蔽中斷NMI)。 所有的錯(cuò)誤事件都被認(rèn)為是不可恢復(fù)的,通常我們?cè)贖ardFault處理程序中僅運(yùn)行錯(cuò)誤報(bào)告然后進(jìn)一步觸發(fā)自動(dòng)復(fù)位。

ARMv8-M Baseline架構(gòu)和ARMv6-M類似,只有一個(gè)錯(cuò)誤異常(HardFault)。但是ARMv8-M Baseline的HardFault優(yōu)先級(jí)可以是-1或者當(dāng)實(shí)現(xiàn)了TrustZone安全擴(kuò)展時(shí)優(yōu)先級(jí)是-3.

ARMv7-M 和 ARMv8-M Mainline產(chǎn)品除了HardFault還有幾個(gè)可配置的錯(cuò)誤異常:

Memmanage(內(nèi)存管理錯(cuò)誤)

總線錯(cuò)誤(總線返回錯(cuò)誤的響應(yīng))

用法錯(cuò)誤(未定義指令或者其他的非法操作)

SecureFault(只用ARMv8-M Mainline產(chǎn)品支持,處理TrustZone安全擴(kuò)展中的安全非法操作)

這些異常的優(yōu)先級(jí)可以編程改變,可以單獨(dú)的打開和關(guān)掉。如果需要,它們也可以利用FAULTMASK寄存器把它們的優(yōu)先級(jí)提高到和HardFault相同的級(jí)別。ARMv7-M 和 ARMv8-M Mainline產(chǎn)品還有幾個(gè)錯(cuò)誤狀態(tài)寄存器可以提供關(guān)于觸發(fā)錯(cuò)誤異常事件的線索和錯(cuò)誤地址的寄存器,用來確定觸發(fā)這個(gè)錯(cuò)誤異常的訪問地址,使調(diào)試更加容易。

ARMv7-M 和 ARMv8-M Mainline產(chǎn)品子規(guī)范中額外的錯(cuò)誤處理程序提供了靈活的錯(cuò)誤處理能力,錯(cuò)誤狀態(tài)寄存器讓錯(cuò)誤事件的定位和調(diào)試更加容易。很多商業(yè)開發(fā)套件中的調(diào)試器已經(jīng)內(nèi)嵌了使用錯(cuò)誤狀態(tài)寄存器來診斷錯(cuò)誤事件的功能。此外,錯(cuò)誤處理程序可以在運(yùn)行時(shí)做一些修復(fù)工作。

表 6: 錯(cuò)誤處理特性比較總結(jié)

4 系統(tǒng)特性

4.1 低功耗

低功耗是Cortex-M處理器的一個(gè)關(guān)鍵優(yōu)點(diǎn)。低功耗是其架構(gòu)的組成部分:

WFI和WFE指令

架構(gòu)級(jí)的休眠模式定義

此外,Cortex-M支持許多其他的低功耗特性:

休眠和深度休眠模式:架構(gòu)級(jí)支持的特性,通過設(shè)備特定的功耗管理寄存器可以進(jìn)一步擴(kuò)展。

Sleep-on-exit模式:中斷驅(qū)動(dòng)的應(yīng)用的低功耗技術(shù)。開啟設(shè)置后,當(dāng)異常處理程序結(jié)束并且沒有其他等待處理的異常中斷時(shí),處理器自動(dòng)進(jìn)入到休眠模式。這樣避免了額外的線程模式中指令的執(zhí)行從而省電,并且減少了不必要的堆棧讀寫操作。

喚醒中斷控制器(WIC):一個(gè)可選的特性,在特定的低功耗狀態(tài),由一個(gè)獨(dú)立于處理器的小模塊偵測中斷情況。例如,在狀態(tài)保留功耗管理(SRPG)設(shè)計(jì)中,當(dāng)處理器被關(guān)電的設(shè)計(jì)。

時(shí)鐘關(guān)閉和架構(gòu)級(jí)時(shí)鐘關(guān)閉:通過關(guān)閉處理器的寄存器或者子模塊的時(shí)鐘輸入來省電

所有這些特性都被Cortex-M0, Cortex-M0+, Cortex-M3, Cortex-M4, Cortex-M7, Cortex-M23 和 Cortex-M33支持。此外,各種低功耗設(shè)計(jì)技術(shù)被用來降低處理器功耗。

因?yàn)楦俚碾娐?,Cortex-M0 and Cortex-M0+處理器比Cortex-M3, Cortex-M4 和 Cortex-M7功耗低。此外,Cortex-M0+額外優(yōu)化減少了程序存取(例如跳轉(zhuǎn)備份)來保持系統(tǒng)層級(jí)的低功耗。

Cortex-M23沒有Cortex-M0 和 Cortex-M0+那么小,但是在相同的配置下,仍然和Cortex-M0+能效一樣。

由于更好性能和低功耗優(yōu)化,在相同配置下,Cortex-M33比Cortex-M4能效比更好。

4.2 Bit-band feature位段

Cortex-M3 和Cortex-M4處理器支持一個(gè)叫做位段的可選功能,允許有兩段通過位段別名地址實(shí)現(xiàn)可以位尋址的1MB的地址空間(一段在從地址0x20000000起始的SRAM空間。另一段是從地址0x40000000起始的外圍設(shè)備空間)。Cortex-M0, M0+ 和 Cortex-M1不支持位段(bit-band)功能,但是可以利用ARM Cortex-M系統(tǒng)設(shè)計(jì)套件(CMSDK)中的總線級(jí)組件在系統(tǒng)層面實(shí)現(xiàn)位段(bit-band)功能。Cortex-M7不支持位段(bit-band),因?yàn)镸7的Cache功能不能與位段一塊使用(Cache控制器不知道內(nèi)存空間的別名地址)。

ARMv8-M的TrustZone 不支持位段, 這是由于位段別名需要的兩個(gè)不同的地址可能會(huì)在不同的安全域中。對(duì)于這些系統(tǒng),外圍設(shè)備數(shù)據(jù)的位操作反而可以在外圍設(shè)備層面處理(例如,通過添加位設(shè)置和清除寄存器)。

4.3 存儲(chǔ)器保護(hù)單元(MPU)

除了Cortex-M0, 其他的Cortex-M處理器都有可選的MPU來實(shí)現(xiàn)存儲(chǔ)空間訪問權(quán)限和存儲(chǔ)空間屬性或者存儲(chǔ)區(qū)間的定義。運(yùn)行實(shí)時(shí)操作系統(tǒng)的嵌入式系統(tǒng), 操作系統(tǒng)會(huì)每個(gè)任務(wù)定義存儲(chǔ)空間訪問權(quán)限和內(nèi)存空間配置來保證每個(gè)任務(wù)都不會(huì)破壞其他的任務(wù)或者操作系統(tǒng)內(nèi)核的地址空間。Cortex-M0+, Cortex-M3 和 Cortex-M4都有8個(gè)可編程區(qū)域空間和非常相似的編程模型。主要的區(qū)別是Cortex-M3/M4的MPU允許兩級(jí)的存儲(chǔ)空間屬性(例如,系統(tǒng)級(jí)cache類型),Cortex-M0+僅支持一級(jí)。Cortex-M7的MPU可以配置成支持8個(gè)或者16個(gè)區(qū)域,兩級(jí)的存儲(chǔ)空間屬性。Cortex-M0 和 Cortex-M1不支持MPU.

Cortex-M23 和 Cortex-M33也支持MPU選項(xiàng),如果實(shí)現(xiàn)了TrustZone安全擴(kuò)展(一個(gè)用于安全軟件程序,另一個(gè)用于非安全軟件程序)可以有最多兩個(gè)MPU。

4.4 單周期I/O接口

單周期I/O接口是Cortex-M0+處理器獨(dú)特的功能,這使Cortex-M0+可以很快的運(yùn)行I/O控制任務(wù)。Cortex-M大多數(shù)的處理器的總線接口是基于AHB Lite或者AHB 5協(xié)議的,這些接口都是流水實(shí)現(xiàn)總線協(xié)議,運(yùn)行在高時(shí)鐘頻率。但是,這意味著每個(gè)傳輸需要兩個(gè)時(shí)鐘周期。單時(shí)鐘周期I/O接口添加了額外的簡單的非流水線總線接口,連接到像GPIO(通用輸入輸出)這樣的一部分設(shè)備特定的外設(shè)上。結(jié)合單周期I/O和Cortex-M0+天然比較低的跳轉(zhuǎn)代價(jià)(只有兩級(jí)流水線),許多I/O控制操作都會(huì)比大多數(shù)其他微控制器架構(gòu)的產(chǎn)品運(yùn)行的更快。

5 性能考慮

5.1 通用數(shù)據(jù)處理能力

在通用微控制器市場,benchmark數(shù)據(jù)經(jīng)常用來衡量微控制器的性能,表7是Cortex-M處理器常用benchmark測試的性能數(shù)據(jù):

表 7: Cortex-M處理器常用benchmakr的性能分?jǐn)?shù)

(來源:CoreMark.org 網(wǎng)站 and ARM 網(wǎng)站)

關(guān)于Dhrystone需要注意的是用來測試的Dhrystone是由官方源程序在沒有啟用inline and 和multi-file compilation編譯選項(xiàng)的情況編譯出來的(官方分?jǐn)?shù))。但是,很多微控制器廠商引用的是完全優(yōu)化編譯的Dhrystone測試出來的數(shù)據(jù)。

但是,benchmark工具的性能測試數(shù)據(jù)可能無法準(zhǔn)確反應(yīng)你的應(yīng)用能達(dá)到的性能。例如,單周期I/O接口和DSP應(yīng)用中使用SIMD,或者Cortex-M4/M7中使用FPU的加速效果并沒有在這些測試數(shù)據(jù)中體現(xiàn)出來。

通常,Cortex-M3 和 Cortex-M4由于以下原因提供了更高的數(shù)據(jù)處理性能:

更豐富的指令集

哈佛總線架構(gòu)

寫緩存(單周期寫操作)

跳轉(zhuǎn)目標(biāo)的預(yù)測取指

Cortex-M33也是基于哈佛總線的架構(gòu),有豐富的指令集。但是不像Cortex-M3 和 Cortex-M4,Cortex-M33處理器流水線是重新設(shè)計(jì)的高效流水線,支持有限的指令雙發(fā)射(可以在一個(gè)時(shí)鐘周期中執(zhí)行最多兩條指令)。

Cortex-M7支持更高的性能,這是因?yàn)镸7擁有雙發(fā)射六級(jí)流水線并支持分支預(yù)測。而且,通過支持指令和數(shù)據(jù)Cache,和即便使用慢速內(nèi)存(例如,嵌入式Flash)也能避免性能損失的緊耦合內(nèi)存,來實(shí)現(xiàn)更高的系統(tǒng)級(jí)性能。

但是,某些I/O操作密集的任務(wù)在Cortex-M0+上運(yùn)行更快,這是因?yàn)椋?/p>

更短的流水線(跳轉(zhuǎn)只需要兩個(gè)周期)

單周期I/O端口

當(dāng)然也有設(shè)備相關(guān)的因素。例如,系統(tǒng)級(jí)設(shè)計(jì),內(nèi)存的速度也會(huì)影響到系統(tǒng)的性能。

你自己的應(yīng)用程序經(jīng)常是你需要的最好的benchmark。CoreMark分?jǐn)?shù)是另外一個(gè)處理器兩倍的處理器并不意味著執(zhí)行你的應(yīng)用也快一倍。對(duì)I/O密集操作的應(yīng)用來說,設(shè)備相關(guān)的系統(tǒng)級(jí)架構(gòu)對(duì)性能有巨大的影響。

5.2 中斷延遲

性能相關(guān)的另外一個(gè)指標(biāo)是中斷延遲。這通常用從中斷請(qǐng)求到中斷服務(wù)程序第一條指令執(zhí)行的時(shí)鐘周期數(shù)來衡量。表8列出了Cortex-M處理器在零等待內(nèi)存系統(tǒng)條件下的中斷延遲比較。

表 8: 零等待內(nèi)存系統(tǒng)條件下的中斷延遲比較

事實(shí)上,真正的中斷延遲受到內(nèi)存系統(tǒng)等待狀態(tài)的影響。例如,許多運(yùn)行頻率超過100Mhz的微控制器搭配的是非常慢的Flash存儲(chǔ)器(例如30到50MHz)。雖然使用了Flash訪問加速硬件來提高性能,中斷延遲仍然受到Flash存儲(chǔ)系統(tǒng)等待狀態(tài)的影響。所以完全有可能運(yùn)行在零等待內(nèi)存系統(tǒng)Cortex-M0/M0+系統(tǒng)比Cortex-M3/M4/M7有更短的中斷延遲。

當(dāng)評(píng)估性能的時(shí)候,不要忘記把中斷處理程序的執(zhí)行時(shí)間考慮在內(nèi)。某些8位或者16位處理器架構(gòu)可能中斷延遲很短,但是會(huì)花費(fèi)數(shù)倍的時(shí)鐘周期完成中斷處理。非常短的中斷響應(yīng)時(shí)間和很短的中斷處理時(shí)間才是實(shí)際有效的。

6 調(diào)試和跟蹤特性

6.1 調(diào)試和跟蹤特性簡介

不同Cortex-M處理器之間有若干區(qū)別。總結(jié)在表9中。

表9: 調(diào)試和跟蹤特性比較

Cortex-M處理器的調(diào)試架構(gòu)是基于ARM CoreSight調(diào)試架構(gòu)設(shè)計(jì)的,它是個(gè)非常容易擴(kuò)展的架構(gòu),支持多處理器系統(tǒng)。

表9列出的是典型設(shè)計(jì)需要考慮的。在CoreSight架構(gòu)下,調(diào)試接口和跟蹤接口模塊是和處理器分離的。因此你采用的設(shè)備的調(diào)試和跟蹤連接和表9的可能不一樣。也可能通過添加一些額外的CoreSight調(diào)試組件來增加一些調(diào)試特性。

6.2 Debug connections調(diào)試接口

調(diào)試接口可以讓調(diào)試者實(shí)現(xiàn)

- 訪問控制調(diào)試和跟蹤特性的寄存器。

- 訪問內(nèi)存空間。對(duì)Cortex-M系列處理器,及時(shí)當(dāng)處理器運(yùn)行時(shí)也可以執(zhí)行內(nèi)存空間訪問。這被稱作實(shí)時(shí)內(nèi)存訪問。

- 訪問處理器核心寄存器。這只能當(dāng)處理器停止的時(shí)候才可以操作。

- 訪問Cortex-M0處理器中微跟蹤緩存(MTB)生成的跟蹤歷史記錄。

另外,調(diào)試接口也會(huì)用作:

- Flash 編程

Cortex-M系列處理器可以選擇傳統(tǒng)的4到5個(gè)引腳(TDI, TDO, TCK, TMS 和可選的 nTRST)的JTAG接口,或者選擇新的只需要兩個(gè)引腳的串行調(diào)試協(xié)議接口,串行調(diào)試接口對(duì)有限數(shù)目引腳的設(shè)備是非常適合的。

圖 10: 串口線或者JTAG調(diào)試接口allows access to processor’s debug features and memory space including peripherals

串行線調(diào)試協(xié)議接口可以處理JTAG支持的所有特性,支持奇偶校驗(yàn)。串行調(diào)試協(xié)議被ARM工具廠商廣泛的采用,許多調(diào)試適配器兩種協(xié)議都支持,串行線型號(hào)共享調(diào)試接口上TCK和TMS針腳。

6.3 跟蹤接口

跟蹤接口讓調(diào)試者可以在程序執(zhí)行時(shí)實(shí)時(shí)的(很小的延時(shí))收集程序運(yùn)行的信息。收集的信息可以是Cortex-M3/M4/M7/M33支持的嵌入式跟蹤單元(ETM)生成的程序指令流信息(指令跟蹤),可以是數(shù)據(jù)跟蹤單元(DWT)生成的數(shù)據(jù)/事件/性能分析信息,或者是軟件控制數(shù)據(jù)跟蹤單元(ITM)生成的信息。

有兩種類型的跟蹤接口可用:

- 跟蹤端口(Trace port)– 多個(gè)數(shù)據(jù)線加上時(shí)鐘信號(hào)線。比SWV有更高的跟蹤帶寬,可以支持SWV的所有跟蹤類型加上指令跟蹤。Cortex-M3/M4/M7或者 Cortex-M33的設(shè)備上,跟蹤端口通常有4個(gè)數(shù)據(jù)線和一個(gè)時(shí)鐘線。(圖11)

- 串行監(jiān)視器(SWV)– 單引腳線跟蹤接口,可以選擇性的支持?jǐn)?shù)據(jù)跟蹤,事件跟蹤,性能分析和測量跟蹤。(圖 12)

圖 11: Trace port 支持指令跟蹤和其他跟蹤功能必要的帶寬

跟蹤接口提供了在處理器運(yùn)行的時(shí)候獲取大量有用信息的能力。例如嵌入式跟蹤單元(ETM)可以獲取指令運(yùn)行歷史記錄,數(shù)據(jù)跟蹤單元(ITM)讓軟件產(chǎn)生消息(例如,通過printf)并利用Trace接口獲取。另外,Cortex-M3/M4/M7/M33支持?jǐn)?shù)據(jù)跟蹤單元(DWT)模塊。

- 可選的數(shù)據(jù)跟蹤:內(nèi)存地址的信息(例如,地址,數(shù)據(jù)和時(shí)間戳的組合)可以在處理器訪問這個(gè)地址的時(shí)候采集

- 性能分析跟蹤:CPU在不同操作任務(wù)使用的時(shí)鐘周期數(shù)(例如,內(nèi)存訪問,休眠)

- 事件跟蹤:提供服務(wù)器響應(yīng)的中斷/異常的運(yùn)行時(shí)間和歷史

圖 12: Serial wire viewer 提供了低成本,少引腳的跟蹤方案

這些跟蹤特性被各種工具廠商廣泛采用,采集的信息也被以各種方式直觀的展現(xiàn)出來。例如DWT獲取的數(shù)據(jù)可以在Keil µVision調(diào)試器中以波形的方式展現(xiàn)出來(Keil微控制器開發(fā)工具的一部分)如圖 13所示。

Figure 13: Keil µVision 調(diào)試器的邏輯分析器

雖然Cortex-M0 和 Cortex-M0+不支持跟蹤接口,Cortex-M0+支持叫做微跟蹤緩存的特性(MTB,圖14)。MTB讓用戶分配一小塊系統(tǒng)SRAM作為存儲(chǔ)指令的緩存,通常設(shè)置為循環(huán)緩存,這樣可以抓取最新的指令執(zhí)行歷史并在調(diào)試器上顯示出來。

這個(gè)MTB跟蹤特性也被Cortex-M23 and Cortex-M33支持。

圖 14: Cortex-M0+/M23/M33 的MTB提供了低成本指令跟蹤方案

7 基于Cortex-M處理器的產(chǎn)品開發(fā)

7.1 為什么Cortex-M系列處理器容易使用

雖然Cortex-M系列處理器有非常多的特性,但是很容易使用的。例如,差不多所有的開發(fā)都可以用像C語言這樣的高級(jí)編程語言。雖然,基于Cortex-M系列處理器產(chǎn)品都大不相同(例如,有不同大小的內(nèi)存,不同的外設(shè),性能和封裝等等),架構(gòu)的一致性讓開發(fā)者一旦對(duì)他們其中的一塊有開發(fā)經(jīng)驗(yàn),就很容易開始使用新的Cortex-M處理器。

為了實(shí)現(xiàn)更容易的軟件開發(fā),更好的軟件重用性和可移植性,ARM開發(fā)了CMSIS-CORE,這兒CMSIS表示Cortex-Microcontroller Software Interface Standard,CMSIS-CORE通過一組APIs為處理器的各種特性像終端管理控制提供了一個(gè)標(biāo)準(zhǔn)的硬件抽象層(HAL), CMSIS-CORE集成在各種微處理器廠商提供的設(shè)備驅(qū)動(dòng)程序庫里,被各種開發(fā)工具套件支持。

除了CMSIS-CORE, CMSIS還包含一個(gè)DSP軟件庫(CMSIS-DSP)。這個(gè)庫提供了為Cortex-M4 和 Cortex-M7優(yōu)化過的各種DSP函數(shù),當(dāng)然也支持其他的Cortex-M系列處理器。CMSIS-CORE 和 CMSIS-DSP庫都是免費(fèi)的,可以從GitHub (CMSIS 4, CMSIS 5)下載到,并被許多工具廠商支持。

7.2 處理器選擇

對(duì)大多數(shù)微控制器用戶來說,微控制器設(shè)備的選擇標(biāo)準(zhǔn)主要取決于成本和外設(shè)的支持情況。但是,你們中間的很多人可能是為下個(gè)芯片產(chǎn)品選擇處理器核心芯片設(shè)計(jì)者,這種情況下,處理器 本身會(huì)是考慮的焦點(diǎn)。

明顯的,在這樣的情況下,性能,芯片面積,功耗和成本會(huì)是至關(guān)重要的因素。同時(shí),還有各種其他的因素需要考慮。例如,如果你在開發(fā)一款互聯(lián)網(wǎng)連接產(chǎn)品,你也許需要選擇有TrustZone安全擴(kuò)展和MPU的處理器,這樣你可以用TrustZone保護(hù)關(guān)鍵的安全特性數(shù)據(jù),運(yùn)行某些任務(wù)在非特權(quán)級(jí)別并用MPU來保護(hù)內(nèi)存空間。另一方面,如果你需要在某些方面認(rèn)證你的產(chǎn)品,Cortex-M23, Cortex-M33, Cortex-M3, Cortex-M4 和 Cortex-M7支持的ETM生成的指令跟蹤會(huì)對(duì)代碼覆蓋率認(rèn)證非常有幫助。

在其他的芯片設(shè)計(jì)領(lǐng)域,如果你正在設(shè)計(jì)可以運(yùn)行在能量采集設(shè)備供電的小傳感器,那么Cortex-M23 和 Cortex-M0+會(huì)是最好的選擇,因?yàn)樗麄兎浅P〔⑶易隽俗钕冗M(jìn)的功耗優(yōu)化。

7.3 生態(tài)系統(tǒng)

使用ARM Cortex-M系列處理器的關(guān)鍵優(yōu)勢之一是廣泛的成熟設(shè)備,開發(fā)工具鏈和軟件庫的支持。目前有

- 超過15家微控制器廠商正在銷售基于ARM Cortex-M系列內(nèi)核的微控制器產(chǎn)品

- 超過10種開發(fā)套件支持ARM Cortex-M系列處理器

- 40多家操作系統(tǒng)廠商的操作系統(tǒng)支持Cortex-M系列處理器

這給了你大量選擇,讓你可以獲得適合目標(biāo)應(yīng)用的最好的設(shè)備,開發(fā)工具和中間件組合。

8 總結(jié)

性能,特性和芯片面積,功耗之間總是需要平衡。為此,ARM開發(fā)了各種Cortex-M處理器,擁有不同級(jí)別的指令集特性,性能,系統(tǒng)和調(diào)試特性。本文介紹了Cortex-M處理器家族各種異同。

雖然存在這差別,但架構(gòu)的一致性和CMSIS-CORE標(biāo)準(zhǔn)化的APIs都讓Cortex-M系列處理器軟件有更好的移植性和可重用性。同時(shí),Cortex-M系列處理器非常方便使用。因此,Cortex-M系列處理器很快成為微控制器市場的最受歡迎的32位處理器架構(gòu)。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉