大家好,我是良許。
在嵌入式開發(fā)的這些年里,我接觸過各種各樣的處理器架構(gòu),從最早做單片機(jī)時(shí)用的51內(nèi)核,到后來(lái)做汽車電子時(shí)用的ARM Cortex-A系列,再到現(xiàn)在項(xiàng)目中偶爾會(huì)碰到的RISC-V架構(gòu)。
每次換一個(gè)新架構(gòu),都需要重新熟悉它的特性和開發(fā)方式。
今天就和大家聊聊嵌入式處理器架構(gòu)這個(gè)話題,幫助大家建立一個(gè)系統(tǒng)的認(rèn)知框架。
1. 什么是處理器架構(gòu)
處理器架構(gòu),簡(jiǎn)單來(lái)說就是處理器的設(shè)計(jì)藍(lán)圖和規(guī)范。
它定義了處理器如何執(zhí)行指令、如何管理內(nèi)存、如何與外設(shè)交互等一系列核心問題。
就像蓋房子需要先有建筑設(shè)計(jì)圖紙一樣,處理器的制造也需要先有架構(gòu)設(shè)計(jì)。
從技術(shù)角度來(lái)看,處理器架構(gòu)主要包含以下幾個(gè)方面:
1.1 指令集架構(gòu)(ISA)
指令集架構(gòu)是處理器架構(gòu)的核心,它定義了處理器能夠識(shí)別和執(zhí)行的所有指令。
比如ARM架構(gòu)有自己的指令集,x86架構(gòu)也有自己的指令集,它們是完全不同的。
這就像不同的語(yǔ)言一樣,說中文的人聽不懂英文,反之亦然。
在我剛開始做嵌入式開發(fā)的時(shí)候,用的是51單片機(jī),它的指令集非常簡(jiǎn)單,只有幾十條指令。
后來(lái)轉(zhuǎn)到ARM平臺(tái),發(fā)現(xiàn)ARM的指令集要復(fù)雜得多,但也更加強(qiáng)大和靈活。
1.2 寄存器組織
寄存器是處理器內(nèi)部用于臨時(shí)存儲(chǔ)數(shù)據(jù)的高速存儲(chǔ)單元。
不同的架構(gòu)有不同數(shù)量和類型的寄存器。
比如ARM Cortex-M系列有16個(gè)通用寄存器,而x86架構(gòu)的寄存器組織方式就完全不同。
1.3 內(nèi)存管理
處理器如何訪問和管理內(nèi)存也是架構(gòu)的重要組成部分。
有些架構(gòu)支持虛擬內(nèi)存管理單元(MMU),有些只支持內(nèi)存保護(hù)單元(MPU),還有些什么都不支持。
這直接影響到系統(tǒng)能否運(yùn)行復(fù)雜的操作系統(tǒng)。
1.4 流水線和執(zhí)行單元
現(xiàn)代處理器通常采用流水線技術(shù)來(lái)提高執(zhí)行效率。
不同架構(gòu)的流水線級(jí)數(shù)、執(zhí)行單元數(shù)量和組織方式都不相同,這直接影響到處理器的性能表現(xiàn)。
2. 主流嵌入式處理器架構(gòu)
2.1 ARM架構(gòu)
ARM架構(gòu)可以說是嵌入式領(lǐng)域的絕對(duì)霸主,市場(chǎng)占有率超過90%。
我在外企做汽車電子的時(shí)候,用的就是ARM Cortex-A系列處理器。
ARM架構(gòu)的成功主要得益于其低功耗、高性能和良好的生態(tài)系統(tǒng)。
ARM架構(gòu)主要分為以下幾個(gè)系列:
2.1.1 ARM Cortex-M系列
這是專門為微控制器(MCU)設(shè)計(jì)的系列,主打低功耗和實(shí)時(shí)性。
我們常用的STM32就是基于Cortex-M內(nèi)核的。
比如STM32F103使用的是Cortex-M3內(nèi)核,STM32F407使用的是Cortex-M4內(nèi)核(帶DSP指令和浮點(diǎn)運(yùn)算單元)。
下面是一個(gè)簡(jiǎn)單的STM32 HAL庫(kù)示例,展示如何初始化GPIO:
#include "stm32f4xx_hal.h"
void GPIO_Init_Example(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* 使能GPIOA時(shí)鐘 */
__HAL_RCC_GPIOA_CLK_ENABLE();
/* 配置PA5引腳為輸出模式 */
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽輸出
GPIO_InitStruct.Pull = GPIO_NOPULL; // 無(wú)上下拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 低速
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* 點(diǎn)亮LED */
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
}
2.1.2 ARM Cortex-A系列
這是為應(yīng)用處理器設(shè)計(jì)的系列,性能強(qiáng)大,支持運(yùn)行Linux等復(fù)雜操作系統(tǒng)。
我在外企做的汽車娛樂系統(tǒng)就是基于Cortex-A9的處理器,運(yùn)行的是定制版的Linux系統(tǒng)。
這類處理器通常主頻在幾百M(fèi)Hz到幾GHz之間,支持MMU、多核心等高級(jí)特性。
2.1.3 ARM Cortex-R系列
這是為實(shí)時(shí)系統(tǒng)設(shè)計(jì)的系列,介于M系列和A系列之間。
主要用于對(duì)實(shí)時(shí)性要求極高的場(chǎng)合,比如汽車的安全系統(tǒng)、工業(yè)控制等。
2.2 x86/x64架構(gòu)
x86架構(gòu)主要由Intel和AMD主導(dǎo),在PC和服務(wù)器領(lǐng)域占據(jù)統(tǒng)治地位。
雖然在傳統(tǒng)嵌入式領(lǐng)域應(yīng)用不多,但在工業(yè)PC、邊緣計(jì)算等場(chǎng)景中也有一定的應(yīng)用。
x86架構(gòu)的特點(diǎn)是性能強(qiáng)大、生態(tài)成熟,但功耗相對(duì)較高。
Intel推出的Atom系列處理器就是專門針對(duì)嵌入式和移動(dòng)設(shè)備的低功耗版本。
我見過一些工業(yè)控制系統(tǒng)使用x86架構(gòu)的嵌入式主板,主要是因?yàn)樾枰\(yùn)行一些只有x86版本的專業(yè)軟件。
2.3 RISC-V架構(gòu)
RISC-V是近年來(lái)異軍突起的開源指令集架構(gòu),由加州大學(xué)伯克利分校開發(fā)。
它最大的特點(diǎn)就是完全開源,任何人都可以免費(fèi)使用,不需要支付授權(quán)費(fèi)用。
RISC-V采用模塊化設(shè)計(jì),基礎(chǔ)指令集非常精簡(jiǎn),只有40多條指令,然后可以根據(jù)需要添加各種擴(kuò)展模塊。
這種設(shè)計(jì)理念非常適合定制化需求強(qiáng)烈的嵌入式應(yīng)用。
雖然RISC-V目前的生態(tài)還不如ARM成熟,但發(fā)展勢(shì)頭非常迅猛。
國(guó)內(nèi)很多芯片廠商都在積極布局RISC-V,比如平頭哥、芯來(lái)科技等。
我最近也在關(guān)注RISC-V的發(fā)展,考慮在一些新項(xiàng)目中嘗試使用。
2.4 MIPS架構(gòu)
MIPS架構(gòu)曾經(jīng)在嵌入式領(lǐng)域占有一席之地,特別是在網(wǎng)絡(luò)設(shè)備和消費(fèi)電子產(chǎn)品中。
但近年來(lái)市場(chǎng)份額逐漸被ARM蠶食。
MIPS的特點(diǎn)是指令集簡(jiǎn)潔、流水線效率高,但生態(tài)系統(tǒng)相對(duì)薄弱。
2.5 其他架構(gòu)
除了上述主流架構(gòu),還有一些專用或小眾架構(gòu),比如:
- PowerPC架構(gòu):主要用于航空航天、工業(yè)控制等高可靠性領(lǐng)域
- AVR架構(gòu):Arduino使用的就是AVR內(nèi)核的單片機(jī)
- 8051架構(gòu):雖然古老,但在一些簡(jiǎn)單應(yīng)用中仍然活躍
- DSP架構(gòu):專門用于數(shù)字信號(hào)處理的架構(gòu),如TI的C2000系列
3. 處理器架構(gòu)的關(guān)鍵特性
3.1 RISC vs CISC
處理器架構(gòu)從指令集設(shè)計(jì)理念上可以分為RISC(精簡(jiǎn)指令集)和CISC(復(fù)雜指令集)兩大類。
RISC架構(gòu)的特點(diǎn)是指令數(shù)量少、指令格式統(tǒng)一、每條指令執(zhí)行時(shí)間固定。
ARM、RISC-V、MIPS都屬于RISC架構(gòu)。
RISC架構(gòu)的優(yōu)勢(shì)是設(shè)計(jì)簡(jiǎn)單、功耗低、容易實(shí)現(xiàn)流水線,非常適合嵌入式應(yīng)用。
CISC架構(gòu)的特點(diǎn)是指令數(shù)量多、指令功能復(fù)雜、指令長(zhǎng)度可變。
x86就是典型的CISC架構(gòu)。
CISC架構(gòu)的優(yōu)勢(shì)是代碼密度高、功能強(qiáng)大,但設(shè)計(jì)復(fù)雜、功耗較高。
在實(shí)際開發(fā)中,我發(fā)現(xiàn)RISC架構(gòu)的處理器通常更容易上手,匯編代碼也更容易理解。
比如ARM的匯編代碼就比x86的匯編代碼簡(jiǎn)潔很多。
3.2 位寬
處理器的位寬指的是處理器一次能處理的數(shù)據(jù)位數(shù)。
常見的有8位、16位、32位和64位。
- 8位處理器:如8051、AVR,適合簡(jiǎn)單控制應(yīng)用
- 16位處理器:如MSP430,性能和功耗的平衡點(diǎn)
- 32位處理器:如ARM Cortex-M、STM32,目前嵌入式主流
- 64位處理器:如ARM Cortex-A53/A72,用于高性能應(yīng)用
位寬越大,處理器能夠直接處理的數(shù)據(jù)范圍就越大,尋址空間也越大。
但位寬增加也會(huì)帶來(lái)功耗和成本的增加。
在實(shí)際項(xiàng)目中,需要根據(jù)應(yīng)用需求選擇合適的位寬。
我在做單片機(jī)項(xiàng)目的時(shí)候,發(fā)現(xiàn)32位處理器已經(jīng)成為主流選擇。
即使是一些簡(jiǎn)單的應(yīng)用,也傾向于使用32位MCU,因?yàn)閮r(jià)格已經(jīng)降到了可以接受的范圍,而且開發(fā)效率更高。
3.3 主頻和性能
處理器的主頻(時(shí)鐘頻率)是衡量性能的重要指標(biāo)之一,但不是唯一指標(biāo)。
同樣主頻的不同架構(gòu)處理器,性能可能相差很大。
在嵌入式系統(tǒng)中,我們通常使用DMIPS(Dhrystone MIPS)或CoreMark來(lái)衡量處理器的實(shí)際性能。
比如ARM Cortex-M4在100MHz主頻下,性能大約是125 DMIPS。
下面是一個(gè)簡(jiǎn)單的性能測(cè)試代碼示例:
#include "stm32f4xx_hal.h"
#include <stdio.h>
#define TEST_ITERATIONS 1000000
void Performance_Test(void)
{
uint32_t start_tick, end_tick;
volatile uint32_t result = 0;
/* 記錄開始時(shí)間 */
start_tick = HAL_GetTick();
/* 執(zhí)行測(cè)試循環(huán) */
for(uint32_t i = 0; i < TEST_ITERATIONS; i++)
{
result += i * 2;
result -= i / 2;
}
/* 記錄結(jié)束時(shí)間 */
end_tick = HAL_GetTick();
/* 計(jì)算執(zhí)行時(shí)間 */
uint32_t elapsed_time = end_tick - start_tick;
printf("Test completed in %lu ms\n", elapsed_time);
printf("Result: %lu\n", result);
}
3.4 功耗特性
功耗是嵌入式系統(tǒng)設(shè)計(jì)中非常重要的考慮因素,特別是對(duì)于電池供電的設(shè)備。
不同架構(gòu)的處理器在功耗方面差異很大。
ARM Cortex-M系列在低功耗方面做得非常出色,支持多種低功耗模式:
- Sleep模式:CPU停止,外設(shè)繼續(xù)運(yùn)行
- Stop模式:CPU和大部分外設(shè)停止,保持RAM數(shù)據(jù)
- Standby模式:僅保持備份寄存器和RTC,功耗最低
下面是一個(gè)進(jìn)入低功耗模式的示例:
#include "stm32f4xx_hal.h"
void Enter_Sleep_Mode(void)
{
/* 掛起SysTick中斷 */
HAL_SuspendTick();
/* 進(jìn)入Sleep模式 */
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
/* 從Sleep模式喚醒后恢復(fù)SysTick */
HAL_ResumeTick();
}
void Enter_Stop_Mode(void)
{
/* 使能PWR時(shí)鐘 */
__HAL_RCC_PWR_CLK_ENABLE();
/* 掛起SysTick中斷 */
HAL_SuspendTick();
/* 進(jìn)入Stop模式 */
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
/* 從Stop模式喚醒后重新配置系統(tǒng)時(shí)鐘 */
SystemClock_Config();
/* 恢復(fù)SysTick */
HAL_ResumeTick();
}
3.5 中斷系統(tǒng)
中斷系統(tǒng)是嵌入式處理器的重要組成部分。
不同架構(gòu)的中斷系統(tǒng)設(shè)計(jì)差異很大。
ARM Cortex-M系列使用NVIC(嵌套向量中斷控制器),支持多達(dá)240個(gè)中斷源,每個(gè)中斷可以配置16個(gè)優(yōu)先級(jí)。
這種設(shè)計(jì)非常靈活,能夠滿足復(fù)雜應(yīng)用的需求。
在實(shí)際開發(fā)中,合理配置中斷優(yōu)先級(jí)非常重要。
我的經(jīng)驗(yàn)是:
- 高優(yōu)先級(jí):給時(shí)間敏感的任務(wù),如通信協(xié)議的超時(shí)處理
- 中優(yōu)先級(jí):給普通外設(shè)中斷,如串口接收、定時(shí)器
- 低優(yōu)先級(jí):給不太緊急的任務(wù),如按鍵掃描
#include "stm32f4xx_hal.h"
void NVIC_Config_Example(void)
{
/* 配置USART1中斷優(yōu)先級(jí) */
HAL_NVIC_SetPriority(USART1_IRQn, 1, 0); // 搶占優(yōu)先級(jí)1,子優(yōu)先級(jí)0
HAL_NVIC_EnableIRQ(USART1_IRQn);
/* 配置TIM2中斷優(yōu)先級(jí) */
HAL_NVIC_SetPriority(TIM2_IRQn, 2, 0); // 搶占優(yōu)先級(jí)2,子優(yōu)先級(jí)0
HAL_NVIC_EnableIRQ(TIM2_IRQn);
/* 配置外部中斷優(yōu)先級(jí) */
HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); // 搶占優(yōu)先級(jí)0(最高),子優(yōu)先級(jí)0
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
}
4. 如何選擇合適的處理器架構(gòu)
在實(shí)際項(xiàng)目中,選擇合適的處理器架構(gòu)需要綜合考慮多個(gè)因素:
4.1 應(yīng)用需求
首先要明確應(yīng)用的具體需求。
如果只是簡(jiǎn)單的控制任務(wù),8位或16位MCU就足夠了。
如果需要運(yùn)行復(fù)雜的算法或操作系統(tǒng),就需要32位甚至64位的處理器。
我在做汽車電子項(xiàng)目的時(shí)候,因?yàn)樾枰\(yùn)行Linux系統(tǒng)并處理大量的多媒體數(shù)據(jù),所以選擇了ARM Cortex-A系列的處理器。
而在做一些簡(jiǎn)單的傳感器節(jié)點(diǎn)時(shí),使用STM32F103這樣的Cortex-M3就完全夠用。
4.2 性能要求
要根據(jù)實(shí)際的計(jì)算量來(lái)選擇處理器性能。
過高的性能會(huì)造成成本和功耗的浪費(fèi),過低的性能又無(wú)法滿足需求。
一個(gè)實(shí)用的方法是:先估算應(yīng)用的計(jì)算量,然后選擇性能略高于需求的處理器,留出一定的余量。
我的經(jīng)驗(yàn)是留出30%左右的性能余量比較合適。
4.3 功耗限制
對(duì)于電池供電的設(shè)備,功耗是首要考慮因素。
需要選擇支持低功耗模式的處理器,并在軟件設(shè)計(jì)時(shí)充分利用這些特性。
4.4 開發(fā)生態(tài)
開發(fā)工具鏈、軟件庫(kù)、技術(shù)支持等生態(tài)因素也很重要。
ARM架構(gòu)在這方面具有明顯優(yōu)勢(shì),有大量的開發(fā)工具和參考資料可用。
4.5 成本因素
處理器的成本包括芯片價(jià)格、開發(fā)成本、授權(quán)費(fèi)用等。對(duì)于大批量產(chǎn)品,即使每顆芯片節(jié)省幾毛錢,總體也能節(jié)省很大一筆費(fèi)用。
4.6 長(zhǎng)期供貨
嵌入式產(chǎn)品的生命周期通常很長(zhǎng),需要考慮處理器的長(zhǎng)期供貨能力。
一些老牌廠商如ST、NXP通常能保證10年以上的供貨周期。
5. 處理器架構(gòu)的發(fā)展趨勢(shì)
5.1 異構(gòu)多核
現(xiàn)代嵌入式處理器越來(lái)越多地采用異構(gòu)多核設(shè)計(jì),即在一顆芯片上集成不同類型的處理器核心。
比如ARM的big.LITTLE架構(gòu),同時(shí)包含高性能核心和低功耗核心,根據(jù)負(fù)載動(dòng)態(tài)切換。
在汽車電子領(lǐng)域,我見過一些芯片同時(shí)集成Cortex-A核心(運(yùn)行Linux)、Cortex-R核心(處理實(shí)時(shí)任務(wù))和Cortex-M核心(控制外設(shè)),這種設(shè)計(jì)能夠很好地平衡性能、實(shí)時(shí)性和功耗。
5.2 AI加速
隨著邊緣AI的興起,越來(lái)越多的嵌入式處理器開始集成AI加速單元,如NPU(神經(jīng)網(wǎng)絡(luò)處理單元)。
這些專用硬件能夠大幅提升神經(jīng)網(wǎng)絡(luò)推理的效率。
5.3 安全特性
安全性在嵌入式系統(tǒng)中越來(lái)越重要。
現(xiàn)代處理器普遍集成了硬件安全模塊,如TrustZone、安全啟動(dòng)、加密引擎等。
5.4 開源架構(gòu)
RISC-V等開源架構(gòu)的興起,為嵌入式處理器市場(chǎng)帶來(lái)了新的活力。
開源架構(gòu)的優(yōu)勢(shì)在于靈活性和可定制性,能夠滿足特定應(yīng)用的需求。
6. 總結(jié)
嵌入式處理器架構(gòu)是一個(gè)博大精深的領(lǐng)域,涉及硬件設(shè)計(jì)、指令集、編譯器、操作系統(tǒng)等多個(gè)層面。
作為嵌入式開發(fā)者,我們不需要成為架構(gòu)設(shè)計(jì)專家,但需要對(duì)常見架構(gòu)有基本的了解,這樣才能在項(xiàng)目中做出正確的技術(shù)選擇。
在我的職業(yè)生涯中,從51單片機(jī)到ARM,從簡(jiǎn)單的裸機(jī)程序到復(fù)雜的Linux系統(tǒng),每一次架構(gòu)的轉(zhuǎn)變都是一次技術(shù)能力的提升。
我的建議是:先深入掌握一種主流架構(gòu)(比如ARM),然后再去了解其他架構(gòu),這樣能夠建立起系統(tǒng)的知識(shí)體系。
隨著技術(shù)的發(fā)展,新的處理器架構(gòu)不斷涌現(xiàn),但核心的設(shè)計(jì)理念是相通的。
只要掌握了基本原理,學(xué)習(xí)新架構(gòu)就會(huì)變得容易很多。
希望這篇文章能夠幫助大家建立起對(duì)嵌入式處理器架構(gòu)的整體認(rèn)識(shí),在實(shí)際項(xiàng)目中能夠做出更好的技術(shù)決策。
更多編程學(xué)習(xí)資源
- C語(yǔ)言零基礎(chǔ)入門電子書-2026最新版
- STM32零基礎(chǔ)入門電子書-2026最新版
- FreeRTOS零基礎(chǔ)入門電子書-2026最新版
- C++ 零基礎(chǔ)入門電子書-2026最新版
- 51單片機(jī)零基礎(chǔ)入門學(xué)習(xí)路線
- AD畫板零基礎(chǔ)入門學(xué)習(xí)路線
- C語(yǔ)言零基礎(chǔ)入門學(xué)習(xí)路線
- C++語(yǔ)言零基礎(chǔ)入門學(xué)習(xí)路線
- ESP32零基礎(chǔ)入門學(xué)習(xí)路線
- FreeRTOS零基礎(chǔ)入門學(xué)習(xí)路線
- Linux應(yīng)用開發(fā)零基礎(chǔ)入門學(xué)習(xí)路線
- Linux底層開發(fā)零基礎(chǔ)入門學(xué)習(xí)路線
- LVGL零基礎(chǔ)入門學(xué)習(xí)路線
- QT零基礎(chǔ)入門學(xué)習(xí)路線
- STM32零基礎(chǔ)入門學(xué)習(xí)路線