2020 年(nián)末(mò),乐鑫推出(chū)安(ān)全(quán)、低(dī)功耗、低(dī)成本(běn)的(de) RISC-V MCU ESP32-C3,支持 2.4 GHz Wi-Fi 和(hé) Bluetooth 5 (LE),廣受用(yòng)戶關(guān)注。目前(qián),ESP32-C3 已進(jìn)入(rù)穩定(dìng)量(liàng)産.
对(duì)于(yú)已使用(yòng) ESP32 實(shí)現(xiàn) Wi-Fi 和(hé)/或(huò)低(dī)功耗藍(lán)牙(yá)連(lián)接功能(néng)的(de)用(yòng)戶,ESP32-C3 是(shì)一个(gè)不(bù)错的(de)升(shēng)级選擇。那(nà)麼(me),我(wǒ)们(men)先(xiān)從这(zhè)个(gè)角(jiǎo)度(dù)对(duì)比一下(xià) ESP32 和(hé) ESP32-C3 的(de)性(xìng)能(néng):
ESP32 和(hé) ESP32-C3 性(xìng)能(néng)对(duì)比
使用(yòng)过(guò) ESP32 的(de)用(yòng)戶可(kě)能(néng)会(huì)問(wèn):ESP32-C3 只(zhī)有(yǒu) 400 KB SRAM,如(rú)何跟 ESP32 的(de) 520 KB SRAM 空(kōng)間(jiān)比?畢竟大(dà)部(bù)分(fēn)情(qíng)況下(xià)可(kě)用(yòng)内存空(kōng)間(jiān)是(shì)開(kāi)發(fà)嵌入(rù)式應(yìng)用(yòng)的(de)一大(dà)重(zhòng)要(yào)因(yīn)素。其(qí)實(shí),ESP32-C3 可(kě)提(tí)供與(yǔ) ESP32 同(tóng)等或(huò)更多(duō)的(de)剩餘内存空(kōng)間(jiān)。本(běn)文(wén)中,我(wǒ)们(men)将簡單介紹 ESP32-C3 是(shì)如(rú)何改進(jìn)存儲空(kōng)間(jiān)管(guǎn)理的(de),並(bìng)向(xiàng)大(dà)家(jiā)展(zhǎn)示與(yǔ) ESP32 相比,ESP32-C3 如(rú)何为(wèi)各(gè)種(zhǒng)應(yìng)用(yòng)提(tí)供同(tóng)等或(huò)更多(duō)的(de)剩餘内存空(kōng)間(jiān)。
内存子系(xì)統的(de)改進(jìn)和(hé)優化
動(dòng)态 IRAM-DRAM 分(fēn)區(qū)
ESP32 存儲映射

ESP32-C3 存儲映射
上(shàng)面(miàn)两(liǎng)张(zhāng)图(tú)分(fēn)别展(zhǎn)示了 ESP32 和(hé) ESP32-C3 的(de)存儲映射方(fāng)式。如(rú)图(tú)所示,ESP32 为(wèi)静(jìng)态 IRAM-DRAM 分(fēn)區(qū),整个(gè) SRAM 中 192 KB 用(yòng)于(yú) IRAM,剩餘 328 KB 用(yòng)于(yú) DRAM。部(bù)分(fēn) IRAM(32 KB 或(huò) 64 KB)配置为(wèi) cache 專用(yòng)。鍊(liàn)接器腳(jiǎo)本(běn)会(huì)将因(yīn)为(wèi)功能(néng)或(huò)性(xìng)能(néng)原因(yīn)不(bù)能(néng)放(fàng)入(rù) flash 中的(de)代(dài)碼,填充到(dào) IRAM 中。除此(cǐ)之(zhī)外(wài),未使用(yòng)的(de) IRAM 空(kōng)間(jiān)将被(bèi)閑置。
在(zài) ESP32-C3 中,沒(méi)有(yǒu)对(duì) IRAM 和(hé) DRAM 進(jìn)行静(jìng)态劃(huà)分(fēn)。SRAM 的(de)前(qián) 16 KB 被(bèi)配置为(wèi) cache 專用(yòng)。與(yǔ) ESP32 不(bù)同(tóng)的(de)是(shì),ESP32-C3 的(de) IRAM 和(hé) DRAM 地(dì)址在(zài)相同(tóng)方(fāng)向(xiàng)遞增。基于(yú)應(yìng)用(yòng)需求,鍊(liàn)接器腳(jiǎo)本(běn)可(kě)将所需的(de)空(kōng)間(jiān)配置为(wèi) IRAM,其(qí)後(hòu)便为(wèi) DRAM 空(kōng)間(jiān)。因(yīn)此(cǐ)相比 ESP32 来(lái)说(shuō),ESP32-C3 的(de)存儲空(kōng)間(jiān)使用(yòng)效率更高。
減少(shǎo) IRAM 占用(yòng)
相比 ESP32,ESP32-C3 基于(yú)下(xià)述改進(jìn)減少(shǎo)了对(duì) IRAM 空(kōng)間(jiān)的(de)占用(yòng):
- ESP32 的(de) IRAM 被(bèi)積累了一段(duàn)时(shí)間(jiān)的(de) ROM 补丁占用(yòng),在(zài) ESP32-C3 中,这(zhè)些(xiē)补丁被(bèi)置于(yú) ROM 中,從而(ér)釋放(fàng)了 IRAM 的(de)空(kōng)間(jiān)。
- 在(zài)充分(fēn)确認相關(guān)代(dài)碼的(de)穩定(dìng)性(xìng)後(hòu),一些(xiē)額外(wài)的(de)通(tòng)信(xìn)棧相關(guān)功能(néng)也被(bèi)置于(yú) ROM 中。
提(tí)升(shēng)藍(lán)牙(yá)存儲管(guǎn)理
ESP32 的(de)藍(lán)牙(yá)子系(xì)統需要(yào)占用(yòng) DRAM 中某一固定(dìng)位(wèi)置的(de)連(lián)續存儲空(kōng)間(jiān)(双(shuāng)模式为(wèi) 56 KB,低(dī)功耗藍(lán)牙(yá)为(wèi) 38 KB)。如(rú)果(guǒ)某个(gè)應(yìng)用(yòng)要(yào)使用(yòng)藍(lán)牙(yá)功能(néng),但並(bìng)不(bù)需要(yào)連(lián)續使用(yòng),这(zhè)便是(shì)一个(gè)相當大(dà)的(de)缺陷。此(cǐ)时(shí),即使藍(lán)牙(yá)功能(néng)未被(bèi)使用(yòng),这(zhè)些(xiē)空(kōng)間(jiān)依然是(shì)占用(yòng)狀态。
ESP32-C3 的(de)藍(lán)牙(yá)子系(xì)統不(bù)要(yào)求其(qí)存儲必須为(wèi)某固定(dìng)位(wèi)置的(de)連(lián)續空(kōng)間(jiān)。反(fǎn)之(zhī),它(tā)使用(yòng)标(biāo)準的(de)系(xì)統堆(duī)来(lái)分(fēn)配存儲空(kōng)間(jiān),因(yīn)此(cǐ)應(yìng)用(yòng)可(kě)以(yǐ)在(zài)需要(yào)的(de)时(shí)候打(dǎ)開(kāi)或(huò)禁用(yòng)藍(lán)牙(yá)。要(yào)實(shí)現(xiàn)这(zhè)一點(diǎn),僅需确保堆(duī)中有(yǒu)足夠的(de)存儲空(kōng)間(jiān)即可(kě)。
常見(jiàn)使用(yòng)情(qíng)況下(xià)的(de)内存消耗
基于(yú)上(shàng)述 3 个(gè)原因(yīn),ESP32-C3 可(kě)为(wèi)應(yìng)用(yòng)提(tí)供更高效的(de)内存使用(yòng)方(fāng)式。接下(xià)来(lái),讓我(wǒ)们(men)以(yǐ)常見(jiàn)的(de)應(yìng)用(yòng)为(wèi)例,看(kàn)看(kàn)这(zhè)些(xiē)案(àn)例下(xià) ESP32 和(hé) ESP32-C3 的(de)内存使用(yòng)情(qíng)況,以(yǐ)及(jí)可(kě)用(yòng)的(de)剩餘内存空(kōng)間(jiān)。
下(xià)表(biǎo)对(duì)比實(shí)验(yàn)中,已盡量(liàng)确保 ESP32 和(hé) ESP32-C3 的(de)配置相同(tóng),且(qiě)使用(yòng)同(tóng)一 SDK 版本(běn) (IDF v4.3-beta3) 运行應(yìng)用(yòng)。

由(yóu)上(shàng)表(biǎo)明(míng)顯可(kě)知:
- 对(duì)于(yú)不(bù)使用(yòng) Wi-Fi 或(huò)藍(lán)牙(yá)的(de)應(yìng)用(yòng),ESP32-C3 可(kě)为(wèi)其(qí)提(tí)供更多(duō)的(de)剩餘内存。这(zhè)一點(diǎn)正(zhèng)是(shì)基于(yú)上(shàng)文(wén)中提(tí)到(dào)的(de) IRAM-DRAM 動(dòng)态分(fēn)區(qū)實(shí)現(xiàn)。
- 对(duì)于(yú)僅使用(yòng) Wi-Fi 的(de)應(yìng)用(yòng),ESP32 和(hé) ESP32-C3 可(kě)提(tí)供的(de)剩餘内存幾(jǐ)乎等同(tóng)。
- 对(duì)于(yú)使用(yòng)藍(lán)牙(yá)的(de)應(yìng)用(yòng),ESP32-C3 可(kě)提(tí)供的(de)剩餘内存比 ESP32 多(duō) 17 ~ 18 KB。
- 除此(cǐ)之(zhī)外(wài),ESP32-C3 支持重(zhòng)新(xīn)啟動(dòng)低(dī)功耗藍(lán)牙(yá)功能(néng),而(ér)無需静(jìng)态分(fēn)配任何内存。
因(yīn)此(cǐ),正(zhèng)如(rú)上(shàng)文(wén)所述,ESP32-C3 可(kě)为(wèi)應(yìng)用(yòng)提(tí)供等同(tóng)于(yú)或(huò)更多(duō)于(yú) ESP32 的(de)剩餘内存空(kōng)間(jiān)。但如(rú)果(guǒ)您考慮選擇 ESP32-C3 芯片(piàn)或(huò)将原有(yǒu) ESP32 程序遷移至(zhì) ESP32-C3 平台(tái),也請您充分(fēn)考慮芯片(piàn)其(qí)他(tā)重(zhòng)要(yào)特(tè)性(xìng),比如(rú) PSRAM 空(kōng)間(jiān)、IO 數量(liàng)以(yǐ)及(jí) CPU 性(xìng)能(néng)等。

