国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

esp32-S3專題二:內(nèi)存1之RAM使用

這篇具有很好參考價值的文章主要介紹了esp32-S3專題二:內(nèi)存1之RAM使用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

esp32-S3模塊內(nèi)部的存儲分為ROM,RAM,SPRAM,RTC內(nèi)存,F(xiàn)LASH,種類很多,幾乎可以不使用外接存儲器的情況下,可以進行很多業(yè)務場景,十分有用?,F(xiàn)在我們逐一講解一下他們的作用和使用方法。

一、ROM

384 KB 內(nèi)部 ROM,
作用:ESP32技術手冊明確說明:Internal ROM 是只讀存儲器,不可編程。Internal ROM 中存放有一些系統(tǒng)底層軟件的 ROM 代碼(程序指令和一些只讀數(shù)據(jù))。程序無法修改,暫不討論。
關于ROM注意的是,全局的const變量和字符串常量通常會存放在只讀數(shù)據(jù)區(qū)(.rodata),有一些硬件芯片會將這個數(shù)據(jù)區(qū)放在ROM里面,但是ESP32將數(shù)據(jù)區(qū)放置在RAM,區(qū)分清楚就好。

二、RAM

種類:片內(nèi)SRAM +片外PSRAM

(一)片內(nèi)SRAM:

大小:512 KB
關系:片內(nèi)SRAM = IRAM (192KB ) + DRAM( 328KB )

IRAM :

作用:存儲關鍵代碼。
1.中斷處理程序。注冊中斷處理程序時使用了 ESP_INTR_FLAG_IRAM,則中斷處理程序必須要放入 IRAM。
2.可將一些時序關鍵代碼放入 IRAM,以減少從 flash 中加載代碼造成的相關損失。
3.以上兩點為鏈接器自主操作,官方也提供接口,可以通過程序來聲明函數(shù),可以將 IRAM_ATTR 宏用作屬性,直接將程序存儲在這部分空間。(非芯片核心開發(fā)人員不推薦使用,容易觸發(fā)芯片系統(tǒng)安全機制)

void IRAM_ATTR gpio_isr_handler(void* arg)
{
   const static DRAM_ATTR uint8_t INDEX_DATA[] = { 45, 33, 12, 0 };
   const static char *MSG = DRAM_STR("I am a string stored in RAM");
}

函數(shù)中的字符串或常量可能沒有自動放入 RAM 中,這時可以使用 DRAM_ATTR 屬性進行標記,或者也可以使用鏈接器腳本方法將它們自動放入 RAM 中。

DRAM:

作用兩個:

  1. 非常量靜態(tài)數(shù)據(jù)(.data 段)和零初始化數(shù)據(jù)(.bss 段)由鏈接器放入內(nèi)部 SRAM 作為數(shù)據(jù)存儲。
    這部分空間的使用是由鏈接器在對項目代碼編譯鏈接時,根據(jù)程序內(nèi)容自動使用??臻g大小隨程序內(nèi)部使用情況擴張。
  2. 官方也提供接口,可以通過程序聲明變量,直接使用這部分空間??梢詫?__NOINIT_ATTR 宏用作屬性,從而將數(shù)據(jù)放入 .noinit 部分。放入該部分的值在啟動時不會被初始化,在軟件重啟后也會保持值不變。
__NOINIT_ATTR uint32_t noinit_data;
  1. 此區(qū)域中的剩余空間可在程序運行時用作堆,也就是內(nèi)部堆。
    查看內(nèi)部堆大小的函數(shù):
printf("sp_get_free_internal_heap_size = %ld\n\r", esp_get_free_internal_heap_size());

一般打印完,發(fā)現(xiàn)內(nèi)部堆大小只有200多KB,因為實際的內(nèi)部堆大小只有RAM中的DRAM中的一部分,其最主要的作用是負責程序的運行空間,例如一般創(chuàng)建線程時聲明的任務棧大小所需的空間就是直接從內(nèi)部堆里面分配出去的。創(chuàng)建20k大小的線程,對應的內(nèi)部堆就減少20k空間。

xTaskCreate((TaskFunction_t )task,"task", 20*1024, (void* )NULL,20,  (TaskHandle_t* )&ITask_Handler);

(二)片外PSRAM:

具體大小可根據(jù)使用業(yè)務進行配置,通常:2-8M;
作用:提供更多空間,方便數(shù)據(jù)的存儲和使用。

配置使用:

1.開啟:使能Support for external,SPI-connected RAM
2.根據(jù)實際外置的PSRAM類型來選擇:Quad 或者Octal
3.選擇程序申請堆的API接口:可以選擇2或者3。

esp32 ram,esp32,c語言,單片機,c++,嵌入式硬件
(上圖為2.9.1版ESP-IDE,部分舊版編輯器將此項類型ESPS3特殊設置或者ESP系統(tǒng)設置里面)

選型2:使用heap_caps_malloc()申請堆,靈活配置申請。

char *data=(char *) heap_caps_malloc(1024*sizeof(char), MALLOC_CAP_DEFAULT | MALLOC_CAP_SPIRAM);

配置項的意義:

/**
 * @brief Flags to indicate the capabilities of the various memory systems
 */
#define MALLOC_CAP_EXEC             (1<<0)  ///< Memory must be able to run executable code
#define MALLOC_CAP_32BIT            (1<<1)  ///< Memory must allow for aligned 32-bit data accesses
#define MALLOC_CAP_8BIT             (1<<2)  ///< Memory must allow for 8/16/...-bit data accesses
#define MALLOC_CAP_DMA              (1<<3)  ///< Memory must be able to accessed by DMA
#define MALLOC_CAP_PID2             (1<<4)  ///< Memory must be mapped to PID2 memory space (PIDs are not currently used)
#define MALLOC_CAP_PID3             (1<<5)  ///< Memory must be mapped to PID3 memory space (PIDs are not currently used)
#define MALLOC_CAP_PID4             (1<<6)  ///< Memory must be mapped to PID4 memory space (PIDs are not currently used)
#define MALLOC_CAP_PID5             (1<<7)  ///< Memory must be mapped to PID5 memory space (PIDs are not currently used)
#define MALLOC_CAP_PID6             (1<<8)  ///< Memory must be mapped to PID6 memory space (PIDs are not currently used)
#define MALLOC_CAP_PID7             (1<<9)  ///< Memory must be mapped to PID7 memory space (PIDs are not currently used)
#define MALLOC_CAP_SPIRAM           (1<<10) ///< Memory must be in SPI RAM
#define MALLOC_CAP_INTERNAL         (1<<11) ///< Memory must be internal; specifically it should not disappear when flash/spiram cache is switched off
#define MALLOC_CAP_DEFAULT          (1<<12) ///< Memory can be returned in a non-capability-specific memory allocation (e.g. malloc(), calloc()) call
#define MALLOC_CAP_IRAM_8BIT        (1<<13) ///< Memory must be in IRAM and allow unaligned access
#define MALLOC_CAP_RETENTION        (1<<14) ///< Memory must be able to accessed by retention DMA
#define MALLOC_CAP_RTCRAM           (1<<15) ///< Memory must be in RTC fast memory

#define MALLOC_CAP_INVALID          (1<<31) ///< Memory can't be used / list end marker

選型3:使用malloc方式申請最直接,默認使用malloc時向外部推申請空間。

 char *data=(char *)malloc(1024*sizeof(char));

另外,也可以通過API接口查看外部堆的剩余大?。?/p>

printf(".esp_get_free_heap_size = %d\n\r", esp_get_free_heap_size());

這次分享到處結(jié)束,下次分享給大家講講Cache、片上的flash和RTC存儲器用法,覺得有幫助可以點個贊,謝謝大家。

參考:

https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s3/api-guides/memory-types.html#iram-ram
https://www.espressif.com.cn/sites/default/files/documentation/esp32-s3_technical_reference_manual_cn.pdf
https://blog.csdn.net/qq_41741344/article/details/116380816文章來源地址http://www.zghlxwxcb.cn/news/detail-554770.html

到了這里,關于esp32-S3專題二:內(nèi)存1之RAM使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 13.STM32F103C8使用PSRAM64H外擴RAM空間

    13.STM32F103C8使用PSRAM64H外擴RAM空間

    最近在調(diào)試STM32F103C8驅(qū)動墨水屏的實驗,在使用過程中,需要使用大內(nèi)存的RAM需要,由于C8T6的RAM空間只有20KB,而墨水屏的需要的內(nèi)存為800*480*2/8=93.75KB。 在網(wǎng)上查了相關的方案,都是使用STM32F103ZE外擴IS62WV51216這種并口SRAM的,使用IS62WV51216需要使用多引腳的STM32F103Zx系列,對于

    2024年02月15日
    瀏覽(24)
  • 內(nèi)存RAM和ROM之間的區(qū)別

    ROM和RAM都是一種存儲技術,只是兩者原理不同,RAM為隨機存儲,掉電不會保存數(shù)據(jù),而ROM可以在掉電的情況下,依然保存原有的數(shù)據(jù)。ROM和RAM指的都是半導體存儲器。本來的含義是:ROM是Read Only Memory的意思,也就是說這種存儲器只能讀,不能寫。而RAM是Random Access Memory的縮寫

    2023年04月08日
    瀏覽(20)
  • 單片機學習-什么是Flash?什么是RAM?什么是ROM?

    Flash 存儲器(FLASH EEPROM)又稱閃存,快閃。 它是EEPROM的一種。它結(jié)合了ROM和RAM的長處。不僅具備電子可擦除可編輯(EEPROM)的性能,還不會斷電丟失數(shù)據(jù)同時可以快速讀取數(shù)據(jù)。它于EEPROM的最大區(qū)別是,F(xiàn)LASH按扇區(qū)(block)操作,而EEPROM按照字節(jié)操作。FLASH的電路結(jié)構(gòu)較簡單,

    2024年02月10日
    瀏覽(36)
  • 路由器的內(nèi)存種類和作用以及NVRAM同RAM的區(qū)別介紹

    路由器內(nèi)存的種類 路由器的內(nèi)存有三類:RAM(Random Access Memory),NVRAM(Non-Volatile Random Access Memory)及EEPROM(Electronic Erasable Programmable Random Access Memory,又稱為Flash)。 路由器內(nèi)存的作用 Flash:存儲路由器的操作系統(tǒng)(IOS:Internet Operating system)。 NVRAM:存儲用戶對路由器的配置表。 RAM:路

    2024年02月06日
    瀏覽(18)
  • Android 9.0 kenel和frameworks中修改ram運行內(nèi)存的功能實現(xiàn)

    在9.0的系統(tǒng)rom產(chǎn)品開發(fā)定制中,在對一些產(chǎn)品開發(fā)中的配置需求方面,在產(chǎn)品后續(xù)訂單中,在某些機型中需要升級下系統(tǒng)內(nèi)核配置,項目時間比較倉促,所以 來不及對硬件重新定制,就需要軟件方面在ram運行內(nèi)存的容量大小方面作假,修改ram真實的大小容量,所以就需要在

    2024年02月09日
    瀏覽(23)
  • ROM、RAM、內(nèi)存、內(nèi)存條、外存、內(nèi)部存儲器、外部存儲器、FLASH等之間的關系

    ROM、RAM、內(nèi)存、內(nèi)存條、外存、內(nèi)部存儲器、外部存儲器、FLASH等之間的關系

    ? ??各位看到這一系列的名詞,是否也曾感受到一頭霧水?研究了一上午終于理清了它們之間的關系,直接上圖說明,相信你看完也能恍然大悟!若有錯誤麻煩在評論區(qū)指出。 這里有幾點需要明確: 存BOIS的ROM也屬于內(nèi)存(因為CPU也可以對其直接尋址),但我們生活中常說

    2023年04月26日
    瀏覽(21)
  • STM32 -4 關于STM32的RAM、ROM

    STM32 -4 關于STM32的RAM、ROM

    一 、說明 它主要用于存儲代碼,F(xiàn)LASH 存儲器的內(nèi)容在掉電后不會丟失,STM32 芯片在運行的時候,也能對自身的內(nèi)部 FLASH 進行讀寫,因此,若內(nèi)部 FLASH 存儲了應用程序后還有剩余的空間,我們可以把它像外部 SPI-FLASH 那樣利用起來,存儲一些程序運行時產(chǎn)生的需要掉電保存的

    2024年02月09日
    瀏覽(19)
  • esp32s3使用多串口

    esp32s3使用多串口

    我按照別人博客中設置串口2,串口打印有問題,因為沒有看到esp32s3 多串口,就總結(jié)了一下自己的經(jīng)驗 下圖為esp32的引腳圖 下圖為esp32s3的引腳圖 ESP32-S3 有三個 UART(通用異步收發(fā)器)控制器,即 UART0、UART1、UART2,支持異步通信(RS232 和 RS485)和 IrDA,通信速率可達到 5 Mbps。

    2024年02月04日
    瀏覽(28)
  • ESP32網(wǎng)絡應用 -- ESP32-S3使用HTTP協(xié)議獲取城市天氣數(shù)據(jù)

    ESP32網(wǎng)絡應用 -- ESP32-S3使用HTTP協(xié)議獲取城市天氣數(shù)據(jù)

    超文本傳輸協(xié)議(Hypertext Transfer Protocol,HTTP),是一種建立在TCP協(xié)議之上,應用非常廣泛的請求-響應協(xié)議,關于HTTP協(xié)議的詳細描述,網(wǎng)上已經(jīng)不乏文章,此處不再詳細論述。 作為一款網(wǎng)絡功能強大Wi-Fi SOC芯片,ESP32-S3可以通過ESP-IDF編程框架提供的應用程序接口,方便地構(gòu)建

    2024年02月09日
    瀏覽(21)
  • 【【典型電路設計之片內(nèi)存儲器的設計之RAM的Verilog HDL描述一】】

    【【典型電路設計之片內(nèi)存儲器的設計之RAM的Verilog HDL描述一】】

    RAM是隨機存儲器,存儲單元的內(nèi)容可按需隨意取出或存入。這種存儲器在斷電后將丟失所有數(shù)據(jù),一般用來存儲一些短時間內(nèi)使用的程序和數(shù)據(jù)。 其內(nèi)部結(jié)構(gòu)如下圖所示: 例:用Verilog HDL 設計深度為8,位寬為8的單端口RAM。 單口RAM,只有一套地址總線,讀和寫操作是分開的

    2024年02月12日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包