乐鑫技术交流
直播中

张鑫

7年用户 756经验值
私信 关注
[问答]

v5.0.1中的例子rgb_panel在800X480下的帧率过低是为什么?

在针对v5.0.1中的例子rgb_panel在800X480的测试中发现帧率过低。
同样的硬件用Arduino例子测试(驱动:Arduino_GFX),帧率正好是rgb_pannel的两倍,cpu占用还低,arduino是66FPS CPU6% ,rgb_pannel是33FPS  CPU17%:如果配置成 double frame buffer, 则7FPS, cpu 60%,是什么位置配置不对导致的吗?

rgp_panel:
Executing action: monitor
Serial port COM4
Connecting....
Detecting chip type... ESP32-S3
Running idf_monitor in directory d:espressifframeworksesp-idf-v5.0.1examplesperipheralslcdrgb_panel
Executing "D:Espressifpython_envidf5.0_py3.8_envScriptspython.exe D:/Espressif/frameworks/esp-idf-v5.0.1tools/idf_monitor.py -p COM4 -b 115200 --toolchain-prefix xtensa-esp32s3-elf- --target esp32s3 d:espressifframeworksesp-idf-v5.0.1examplesperipheralslcdrgb_panelbuildrgb_panel.elf --force-color -m 'D:Espressifpython_envidf5.0_py3.8_envScriptspython.exe' 'D:/Espressif/frameworks/esp-idf-v5.0.1toolsidf.py'"...
--- WARNING: GDB cannot open serial ports accessed as COMx
--- Using \.COM4 instead...
--- idf_monitor on \.COM4 115200 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
ESP-ROM:esp32s3-20210327
Build:Mar 27 2021
rst:0x1 (POWERON),boot:0x8 (SPI_FAST_FLASH_BOOT)
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fce3810,len:0x164c
load:0x403c9700,len:0xbe0
load:0x403cc700,len:0x2ef8
entry 0x403c9900
I (25) boot: ESP-IDF v5.0.1-dirty 2nd stage bootloader
I (25) boot: compile time 15:40:34
I (25) boot: chip revision: v0.1
I (27) boot.esp32s3: Boot SPI Speed : 80MHz
I (32) boot.esp32s3: SPI Mode       : DIO
I (37) boot.esp32s3: SPI Flash Size : 2MB
I (41) boot: Enabling RNG early entropy source...
I (47) boot: Partition Table:
I (50) boot: ## Label            Usage          Type ST Offset   Length
I (58) boot:  0 nvs              WiFi data        01 02 00009000 00006000
I (65) boot:  1 phy_init         RF data          01 01 0000f000 00001000
I (73) boot:  2 factory          factory app      00 00 00010000 00100000
I (80) boot: End of partition table
I (84) esp_image: segment 0: paddr=00010020 vaddr=3c050020 size=2567ch (153212) map
I (120) esp_image: segment 1: paddr=000356a4 vaddr=3fc93600 size=031d8h ( 12760) load
I (123) esp_image: segment 2: paddr=00038884 vaddr=40374000 size=07794h ( 30612) load
I (133) esp_image: segment 3: paddr=00040020 vaddr=42000020 size=4cf7ch (315260) map
I (191) esp_image: segment 4: paddr=0008cfa4 vaddr=4037b794 size=07e28h ( 32296) load
I (205) boot: Loaded app from partition at offset 0x10000
I (205) boot: Disabling RNG early entropy source...
D (216) flash HPM: HPM with dummy, status is 3
I (217) octal_psram: vendor id    : 0x0d (AP)
I (217) octal_psram: dev id       : 0x02 (generation 3)
I (221) octal_psram: density      : 0x03 (64 Mbit)
I (226) octal_psram: good-die     : 0x01 (Pass)
I (231) octal_psram: Latency      : 0x01 (Fixed)
I (237) octal_psram: VCC          : 0x01 (3V)
I (242) octal_psram: SRF          : 0x01 (Fast Refresh)
I (247) octal_psram: BurstType    : 0x01 (Hybrid Wrap)
I (253) octal_psram: BurstLen     : 0x01 (32 Byte)
I (259) octal_psram: Readlatency  : 0x02 (10 cycles@Fixed)
I (265) octal_psram: DriveStrength: 0x00 (1/1)
D (271) MSPI Timing: tuning success, best point is index 4
I (276) esp_psram: Found 8MB PSRAM device
I (280) esp_psram: Speed: 80MHz
V mmu_psram: Instructions from flash page4 copy to SPIRAM page0, Offset: 4
V (324) mmu_psram: after copy instruction, page_id is 5
I (325) mmu_psram: Instructions copied and mapped to SPIRAM
V (325) esp_psram: after copy .text, used page is 5, start_page is 5, psram_available_size is 8060928 B
V mmu_psram: Rodata from flash page1 copy to SPIRAM page5, Offset: -4
V (360) mmu_psram: after copy rodata, page_id is 8
I (360) mmu_psram: Read only data copied and mapped to SPIRAM
V (360) esp_psram: after copy .rodata, used page is 3, start_page is 8, psram_available_size is 7864320 B
V (370) mmu: after coalescing, 1 regions are left
V (374) mmu: found laddr is 0x80000
V (378) esp_psram: 8bit-aligned-region: actual_mapped_len is 0x780000 bytes
V (385) esp_psram: 8bit-aligned-range: 0x780000 B, starting from: 0x3c080000
I (392) cpu_start: Pro cpu up.
I (396) cpu_start: Starting app cpu, entry point is 0x40375404
0x40375404: call_start_cpu1 at D:/Espressif/frameworks/esp-idf-v5.0.1/components/esp_system/port/cpu_start.c:142

I (0) cpu_start: App cpu up.
V CACHE_ERR: illegal error intr clr & ena mask is: 0x3f
V CACHE_ERR: core 1 access error intr clr & ena mask is: 0x1f
I (820) esp_psram: SPI SRAM memory test OK
D (820) efuse: In EFUSE_BLK2__DATA4_REG is used 2 bits starting with 0 bit
D (821) efuse: In EFUSE_BLK2__DATA4_REG is used 8 bits starting with 13 bit
D (836) clk: RTC_SLOW_CLK calibration value: 3736973
V CACHE_ERR: illegal error intr clr & ena mask is: 0x3f
V CACHE_ERR: core 0 access error intr clr & ena mask is: 0x1f
I (844) cpu_start: Pro cpu start user code
I (848) cpu_start: cpu freq: 160000000 Hz
I (853) cpu_start: Application information:
I (857) cpu_start: Project name:     rgb_panel
I (863) cpu_start: App version:      v5.0.1-dirty
I (868) cpu_start: Compile time:     Apr  2 2023 15:40:11
I (874) cpu_start: ELF file SHA256:  ce6a4b8e7f314e06...
I (880) cpu_start: ESP-IDF:          v5.0.1-dirty
I (885) cpu_start: Min chip rev:     v0.0
I (890) cpu_start: Max chip rev:     v0.99
I (895) cpu_start: Chip rev:         v0.1
V (900) memory_layout: reserved range is 0x3c075664 - 0x3c07568c
D (906) memory_layout: Checking 6 reserved memory ranges:
D (911) memory_layout: Reserved memory range 0x3c000000 - 0x3e000000
D (918) memory_layout: Reserved memory range 0x3fc84000 - 0x3fc93600
D (924) memory_layout: Reserved memory range 0x3fc93600 - 0x3fc97960
D (930) memory_layout: Reserved memory range 0x3fceee34 - 0x3fcf0000
D (937) memory_layout: Reserved memory range 0x40374000 - 0x40383600
0x40374000: _WindowOverflow4 at D:/Espressif/frameworks/esp-idf-v5.0.1/components/freertos/FreeRTOS-Kernel/portable/xtensa/xtensa_vectors.S:1743

D (943) memory_layout: Reserved memory range 0x600fe000 - 0x600fe010
D (950) memory_layout: Building list of available memory regions:
V (956) memory_layout: Examining memory region 0x3c000000 - 0x3e000000
V (963) memory_layout: Region 0x3c000000 - 0x3e000000 inside of reserved 0x3c000000 - 0x3e000000
V (971) memory_layout: Examining memory region 0x40374000 - 0x40378000
0x40374000: _WindowOverflow4 at D:/Espressif/frameworks/esp-idf-v5.0.1/components/freertos/FreeRTOS-Kernel/portable/xtensa/xtensa_vectors.S:1743

0x40378000: bootloader_flash_execute_command_common at D:/Espressif/frameworks/esp-idf-v5.0.1/components/bootloader_support/bootloader_flash/src/bootloader_flash.c:554 (discriminator 4)

V (978) memory_layout: Region 0x40374000 - 0x40378000 inside of reserved 0x40374000 - 0x40383600
0x40374000: _WindowOverflow4 at D:/Espressif/frameworks/esp-idf-v5.0.1/components/freertos/FreeRTOS-Kernel/portable/xtensa/xtensa_vectors.S:1743

0x40378000: bootloader_flash_execute_command_common at D:/Espressif/frameworks/esp-idf-v5.0.1/components/bootloader_support/bootloader_flash/src/bootloader_flash.c:554 (discriminator 4)

0x40374000: _WindowOverflow4 at D:/Espressif/frameworks/esp-idf-v5.0.1/components/freertos/FreeRTOS-Kernel/portable/xtensa/xtensa_vectors.S:1743

V (987) memory_layout: Examining memory region 0x3fc88000 - 0x3fc90000
V (993) memory_layout: Region 0x3fc88000 - 0x3fc90000 inside of reserved 0x3fc84000 - 0x3fc93600
V (1002) memory_layout: Examining memory region 0x3fc90000 - 0x3fca0000
V (1009) memory_layout: Start of region 0x3fc90000 - 0x3fca0000 overlaps reserved 0x3fc84000 - 0x3fc93600
V (1019) memory_layout: Start of region 0x3fc93600 - 0x3fca0000 overlaps reserved 0x3fc93600 - 0x3fc97960
D (1028) memory_layout: Available memory region 0x3fc97960 - 0x3fca0000
V (1035) memory_layout: Examining memory region 0x3fca0000 - 0x3fcb0000
D (1042) memory_layout: Available memory region 0x3fca0000 - 0x3fcb0000
V (1048) memory_layout: Examining memory region 0x3fcb0000 - 0x3fcc0000
D (1055) memory_layout: Available memory region 0x3fcb0000 - 0x3fcc0000
V (1062) memory_layout: Examining memory region 0x3fcc0000 - 0x3fcd0000
D (1068) memory_layout: Available memory region 0x3fcc0000 - 0x3fcd0000
V (1075) memory_layout: Examining memory region 0x3fcd0000 - 0x3fce0000
D (1082) memory_layout: Available memory region 0x3fcd0000 - 0x3fce0000
V (1088) memory_layout: Examining memory region 0x3fce0000 - 0x3fce9710
D (1095) memory_layout: Available memory region 0x3fce0000 - 0x3fce9710
V (1102) memory_layout: Examining memory region 0x3fce9710 - 0x3fcf0000
V (1108) memory_layout: End of region 0x3fce9710 - 0x3fcf0000 overlaps reserved 0x3fceee34 - 0x3fcf0000
D (1118) memory_layout: Available memory region 0x3fce9710 - 0x3fceee34
V (1125) memory_layout: Examining memory region 0x3fcf0000 - 0x3fcf8000
D (1131) memory_layout: Available memory region 0x3fcf0000 - 0x3fcf8000
V (1138) memory_layout: Examining memory region 0x600fe000 - 0x60100000
V (1145) memory_layout: Start of region 0x600fe000 - 0x60100000 overlaps reserved 0x600fe000 - 0x600fe010
D (1154) memory_layout: Available memory region 0x600fe010 - 0x60100000
I (1161) heap_init: Initializing. RAM available for dynamic allocation:
D (1168) heap_init: New heap initialised at 0x3fc97960
I (1173) heap_init: At 3FC97960 len 00051DB0 (327 KiB): D/IRAM
I (1180) heap_init: At 3FCE9710 len 00005724 (21 KiB): STACK/DRAM
D (1187) heap_init: New heap initialised at 0x3fcf0000
I (1192) heap_init: At 3FCF0000 len 00008000 (32 KiB): DRAM
D (1198) heap_init: New heap initialised at 0x600fe010
I (1203) heap_init: At 600FE010 len 00001FF0 (7 KiB): RTCRAM
I (1210) esp_psram: Adding pool of 7680K of PSRAM memory to heap allocator
V (1217) intr_alloc: esp_intr_alloc_intrstatus (cpu 0): checking args
V (1224) intr_alloc: esp_intr_alloc_intrstatus (cpu 0): Args okay. Resulting flags 0x40E
D (1232) intr_alloc: Connected src 39 to int 2 (cpu 0)
V (1237) memspi: raw_chip_id: 1840C8

V (1241) memspi: chip_id: C84018

V (1244) memspi: raw_chip_id: 1840C8

V (1248) memspi: chip_id: C84018

D (1252) spi_flash: trying chip: issi
D (1256) spi_flash: trying chip: gd
I (1259) spi_flash: detected chip: gd
I (1264) spi_flash: flash io: dio
W (1268) spi_flash: Detected size(16384k) larger than the size in the binary image header(2048k). Using the size in the binary image header.
D (1281) cpu_start: calling init function: 0x42038de8
0x42038de8: esp_ipc_init at D:/Espressif/frameworks/esp-idf-v5.0.1/components/esp_system/esp_ipc.c:115

D (1286) cpu_start: calling init function: 0x42002a60
0x42002a60: esp_reset_reason_init at D:/Espressif/frameworks/esp-idf-v5.0.1/components/esp_system/port/soc/esp32s3/reset_reason.c:67

D (1291) cpu_start: calling init function: 0x42001c18
0x42001c18: esp_init_app_elf_sha256 at D:/Espressif/frameworks/esp-idf-v5.0.1/components/esp_app_format/esp_app_desc.c:69

D (1296) cpu_start: calling init function: 0x42006ff0 on core: 0
0x42006ff0: __esp_system_init_fn_esp_timer_startup_init at D:/Espressif/frameworks/esp-idf-v5.0.1/components/esp_timer/src/esp_timer.c:509

V (1302) intr_alloc: esp_intr_alloc_intrstatus (cpu 0): checking args
V (1309) intr_alloc: esp_intr_alloc_intrstatus (cpu 0): Args okay. Resulting flags 0xC02
D (1317) intr_alloc: Connected src 59 to int 3 (cpu 0)
D (1322) cpu_start: calling init function: 0x42002730 on core: 0
0x42002730: __esp_system_init_fn_init_components0 at D:/Espressif/frameworks/esp-idf-v5.0.1/components/esp_system/startup.c:484

V (1328) intr_alloc: esp_intr_alloc_intrstatus (cpu 0): checking args
V (1335) intr_alloc: esp_intr_alloc_intrstatus (cpu 0): Args okay. Resulting flags 0x40E
D (1343) intr_alloc: Connected src 79 to int 9 (cpu 0)
I (1348) cpu_start: Starting scheduler on PRO CPU.
V (1354) intr_alloc: esp_intr_alloc_intrstatus (cpu 0): checking args
V (1354) intr_alloc: esp_intr_alloc_intrstatus (cpu 0): Args okay. Resulting flags 0x402
D (1354) intr_alloc: Connected src 57 to int 12 (cpu 0)
V (1354) intr_alloc: esp_intr_alloc_intrstatus (cpu 1): checking args
V (1364) intr_alloc: esp_intr_alloc_intrstatus (cpu 1): Args okay. Resulting flags 0x40E
D (1364) intr_alloc: Connected src 80 to int 2 (cpu 1)
I (1374) cpu_start: Starting scheduler on APP CPU.
V (1384) intr_alloc: esp_intr_alloc_intrstatus (cpu 1): checking args
V (1384) intr_alloc: esp_intr_alloc_intrstatus (cpu 1): Args okay. Resulting flags 0x402
D (1394) intr_alloc: Connected src 58 to int 3 (cpu 1)
D (1404) heap_init: New heap initialised at 0x3fce9710
I (1404) esp_psram: Reserving pool of 32K of internal memory for DMA/internal allocations
D (1414) esp_psram: Allocating block of size 32768 bytes
V (1414) intr_alloc: esp_intr_alloc_intrstatus (cpu 0): checking args
V (1424) intr_alloc: esp_intr_alloc_intrstatus (cpu 0): Args okay. Resulting flags 0xE
D (1434) intr_alloc: Connected src 52 to int 13 (cpu 0)
I (1434) example: Create semaphores
I (1444) example: Turn off LCD backlight
I (1444) gpio: GPIO[2]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
I (1454) example: Install RGB LCD panel driver
V (1504) intr_alloc: esp_intr_alloc_intrstatus (cpu 0): checking args
V (1504) intr_alloc: esp_intr_alloc_intrstatus (cpu 0): Args okay. Resulting flags 0x90E
D (1514) intr_alloc: Connected src 24 to int 17 (cpu 0)
D (1514) gdma: new group (0) at 0x3c1f7944
D (1524) gdma: new pair (0,0) at 0x3c1f7980
D (1524) gdma: new tx channel (0,0) at 0x3c13c104
D (1524) gdma: tx channel (0,0), (4:64) bytes aligned, burst enabled
V (1534) intr_alloc: esp_intr_alloc_intrstatus (cpu 0): checking args
V (1544) intr_alloc: esp_intr_alloc_intrstatus (cpu 0): Args okay. Resulting flags 0x80E
D (1554) intr_alloc: Connected src 71 to int 18 (cpu 0)
D (1554) gdma: install interrupt service for tx channel (0,0)
D (1564) lcd_panel.rgb: new rgb panel(0) @0x3fc983e0, num_fbs=2, fb_size=768000, bb0 @0x3fc9859c, bb1 @0x3fca0100, bb_size=16000
D (1574) lcd_panel.rgb: fb[0] @0x3c080900
D (1574) lcd_panel.rgb: fb[1] @0x3c13c140
I (1584) example: Register event callbacks
I (1584) example: Initialize RGB LCD panel
D (1594) lcd_hal: n=4,a=9,b=4,mo=2
D (1594) lcd_panel.rgb: rgb panel(0) start, pclk=18000000Hz
I (1604) example: Turn on LCD backlight
I (1604) example: Initialize LVGL library
I (1604) example: Allocate separate LVGL draw buffers from PSRAM
I (1614) example: Register display driver to LVGL
I (1624) example: Install LVGL tick timer
I (1624) example: Display LVGL Scatter Chart

回帖(1)

王娟

2024-6-12 16:24:21
在这种情况下,帧率过低可能是由以下几个原因导致的:

1. **代码优化**:可能rgb_panel的代码没有进行足够的优化,导致效率较低。与Arduino_GFX相比,可能存在一些不必要的计算或者循环。

2. **内存管理**:在rgb_panel中,可能存在内存分配和释放的问题,导致CPU占用较高。检查代码,确保内存管理得当。

3. **双缓冲**:当配置为双缓冲时,帧率降低到7FPS,CPU占用60%。这可能是因为双缓冲需要更多的内存和计算资源。在这种情况下,可以尝试优化双缓冲的实现,或者考虑使用其他方法来提高性能。

4. **ESP-IDF版本**:确保你使用的ESP-IDF版本与rgb_panel示例兼容。如果版本不兼容,可能会导致性能问题。

5. **硬件限制**:检查硬件是否满足rgb_panel示例的需求。如果硬件性能不足,可能会导致帧率降低。

为了解决这个问题,你可以尝试以下步骤:

1. **优化代码**:检查rgb_panel示例的代码,看看是否有可以优化的地方,例如减少不必要的计算、循环等。

2. **内存管理**:检查代码中的内存分配和释放,确保内存管理得当。

3. **调整双缓冲实现**:尝试优化双缓冲的实现,或者寻找其他方法来提高性能。

4. **更新ESP-IDF**:确保你使用的ESP-IDF版本与rgb_panel示例兼容。如果有更新,请尝试更新到最新版本。

5. **测试硬件**:检查硬件是否满足示例的需求,如果硬件性能不足,可能需要更换更高性能的硬件。

通过以上步骤,你应该能够找到导致帧率过低的原因,并采取相应的措施来解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分