silver-crow 发表于 2024-11-15 17:13:30

求助

使用ESP32S3单片机模组做人脸识别终端,测试时,在如下另种情况下,单片机重启:
1.完成人脸识别后连接ESP32S3的蓝牙,蓝牙连接成功后ESP32S3模组重启

2.连接ESP32S3的蓝牙后进行人脸识别,识别通过钱ESP32S3模组不重启,识别通过后ESP32S3模组重启


在完成人脸识别和蓝牙连接后,打印如下内容后重启:(只通过串口供电时打印的内容也是这个)
ESP-ROM:esp32s3-20210327
Build:Mar 27 2021
rst:0x1 (POWERON),boot:0xb (SPI_FAST_FLASH_BOOT)
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fce2810,len:0x178c
load:0x403c8700,len:0x4
load:0x403c8704,len:0xcb8
load:0x403cb700,len:0x2db0
entry 0x403c8914
I (27) boot: ESP-IDF v5.3-dirty 2nd stage bootloader
I (27) boot: compile time Nov 15 2024 08:53:08
I (27) boot: Multicore bootloader
I (30) boot: chip revision: v0.2
I (34) boot.esp32s3: Boot SPI Speed : 80MHz
I (39) boot.esp32s3: SPI Mode       : DIO
I (44) boot.esp32s3: SPI Flash Size : 8MB
I (48) boot: Enabling RNG early entropy source...
I (54) boot: Partition Table:
I (57) boot: ## Label            Usage          Type ST Offset   Length
I (65) boot:0 nvs            WiFi data      01 02 00009000 00006000
I (72) boot:1 phy_init         RF data          01 01 0000f000 00001000
I (79) boot:2 factory          factory app      00 00 00010000 00100000
I (87) boot: End of partition table
I (91) esp_image: segment 0: paddr=00010020 vaddr=3c090020 size=24da8h (150952) map
I (127) esp_image: segment 1: paddr=00034dd0 vaddr=3fc99300 size=04e68h ( 20072) load
I (136) esp_image: segment 2: paddr=00039c40 vaddr=40374000 size=063d8h ( 25560) load
I (142) esp_image: segment 3: paddr=00040020 vaddr=42000020 size=85db8h (548280) map
I (241) esp_image: segment 4: paddr=000c5de0 vaddr=4037a3d8 size=0eeech ( 61164) load
I (268) boot: Loaded app from partition at offset 0x10000
I (268) boot: Disabling RNG early entropy source...
I (280) cpu_start: Multicore app
I (290) cpu_start: Pro cpu start user code
I (290) cpu_start: cpu freq: 240000000 Hz
I (290) app_init: Application information:
I (293) app_init: Project name:   ble_2
I (297) app_init: App version:      1
I (302) app_init: Compile time:   Nov 15 2024 08:52:52
I (308) app_init: ELF file SHA256:70e081eb1...
I (313) app_init: ESP-IDF:          v5.3-dirty
I (318) efuse_init: Min chip rev:   v0.0
I (323) efuse_init: Max chip rev:   v0.99 
I (328) efuse_init: Chip rev:         v0.2
I (333) heap_init: Initializing. RAM available for dynamic allocation:
I (340) heap_init: At 3FCA41C8 len 00045548 (277 KiB): RAM
I (346) heap_init: At 3FCE9710 len 00005724 (21 KiB): RAM
I (352) heap_init: At 3FCF0000 len 00008000 (32 KiB): DRAM
I (358) heap_init: At 600FE100 len 00001EE8 (7 KiB): RTCRAM
I (365) spi_flash: detected chip: generic
I (369) spi_flash: flash io: dio
W (373) spi_flash: Detected size(16384k) larger than the size in the binary image header(8192k). Using the size in the binary image header.
W (386) ADC: legacy driver is deprecated, please migrate to `esp_adc/adc_oneshot.h`
I (395) sleep: Configure to isolate all GPIO pins in sleep state
I (401) sleep: Enable automatic switching of GPIO sleep configuration
I (408) coexist: coex firmware version: dab85ae96
I (415) coexist: coexist rom version e7ae62f
I (419) main_task: Started on CPU0
I (429) main_task: Calling app_main()
| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 

I (639) BLE_INIT: Bluetooth MAC: 3c:84:27:c0:33:3e
I (639) phy_init: phy_version 680,a6008b2,Jun4 2024,16:41:10
I (689) uart: queue free spaces: 20
E (689) gptimer: gptimer_stop(418): timer is not running
I (699) main: Read succ
I (699) GATTS_TABLE_DEMO: create attribute table successfully, the number handle = 13

I (709) main: Read fail
I (709) main: Read fail
I (709) GATTS_TABLE_DEMO: advertising start successfully
I (709) main: Read fail
I (719) main: Read fail
I (719) main: Read fail
I (719) main: Read fail
I (729) main: Read fail
I (729) main: Read fail
I (729) main: Read fail
I (739) main: Read fail
I (739) main: Read fail
I (739) main: Read fail
I (749) main: Read fail
I (749) main: Read fail
I (749) main: Read fail
I (759) main: Read fail
I (759) main: Read fail
I (759) main: Read fail
I (769) main: Read fail
I (769) main: Read fail
I (769) main: Read fail
I (769) main: Read fail
I (779) main: Read fail
I (779) main: Read fail
I (779) main: Read fail
I (789) main: Read fail
I (789) main: Read fail
I (789) main: Read fail
I (799) main: Read fail
I (799) main: Read fail
I (799) main: Read fail
I (809) main: Read fail
I (809) main: Read fail
I (809) main: Read fail
I (819) main: Read fail
I (819) main: Read fail
I (819) main: Read fail
I (819) main: Read fail
I (829) main: Read fail
I (829) main: Read fail
I (829) main: Read fail
I (839) main: Read fail
I (839) main: Read fail
I (839) main: Read fail
I (849) main: Read fail
I (849) main: Read fail
I (849) main: Read fail
I (859) main: Read fail
I (859) main: Read fail
I (859) main: TotalFaceInfoNum = 1
I (869) main: Read succ
I (869) main: Read succ
I (869) main: Read succ
I (879) main: Read succ
I (879) main: Read succ
I (879) main: Read succ
I (889) main: Read succ
I (889) main: Read succ
I (889) main: Read succ
I (899) main: Read succ
I (899) main: TotalUsageRecordNum = 10
I (899) uart1: UART1 receive len:7
I (909) timer: minute cnt = 20
I (909) main_task: Returned from app_main()

不二如是 发表于 2024-11-15 17:13:31

根据鱼油提供的日志和描述,ESP32S3 模组在完成某些操作后发生了重启。

在运行日志中可以看到,当 app_main() 函数返回后,系统重新启动:

I (909) main_task: Returned from app_main()
在 ESPIDF 中,app_main() 函数是应用程序的入口点。

通常情况下,我们会在 app_main() 中创建各种任务 (tasks) 来执行程序逻辑,而不是直接从 app_main() 返回。

一旦 app_main() 函数执行完毕并返回,系统默认行为是重启。

1. 人脸识别完成后连接蓝牙成功导致重启:当人脸识别完成后再连接蓝牙,一旦蓝牙连接成功,ESP32S3 模组就重启。这可能是因为 app_main() 函数执行完了所有逻辑并返回,导致系统自动重启。

2. 连接蓝牙后进行人脸识别导致重启:类似地,当先连接蓝牙,再进行人脸识别后,识别通过后 ESP32S3 模组重启,这也可能是 app_main() 函数执行完所有逻辑后返回所致。

导致重启的可能原因:


[*]app_main()函数返回:在 ESP-IDF 中,如果 app_main() 函数正常返回,ESP32 会进行重新启动。此行为是预期的,因为 app_main() 是用户应用的主要执行函数。通常,应确保 app_main() 在应用程序的生命周期内不会返回。
[*] 电源问题或Brownout: 如果电源不稳定,可能会导致 ESP32S3 重启。但从日志中没有看到任何与电源问题相关的信息。
[*] 内存或WDT(看门狗定时器)问题: 如果应用程序内存溢出或看门狗超时,也可能导致重启。但日志中没有显示任何 panic 信息或WDT触发信息。
[*] 程序调用 esp_restart(): 应用程序可能在某些情况下主动调用 esp_restart() 重新启动设备。

从提供的日志我们可以看到以下关键点:


[*]app_main() 函数开始执行(I (429) main_task: Calling app_main())。
[*] 在 app_main() 中执行一系列操作,包括 GPIO 配置、蓝牙初始化、读取/写入操作等。
[*] 最后,日志显示 I (909) main_task: Returned from app_main(),表示 app_main() 执行完成并返回。
[*] 随后系统自动重启,重新加载运行(rst:0x1 (POWERON),boot:0xb (SPI_FAST_FLASH_BOOT))。

1. 确保 app_main() 不返回: app_main() 是应用程序的主函数,不应该正常返回。如果 app_main() 返回,系统将默认重启。

为了防止 app_main() 返回,可以使用无线循环或任务调度来保持应用程序运行:

void app_main(void)
{
    // 执行初始化和配置任务
    ...

    // 创建任务、定时器或其他应用逻辑

    // 保持 app_main 运行
    for (;;) {
      vTaskDelay(pdMS_TO_TICKS(1000)); // 延迟1秒以释放CPU
    }

    // 或者使用 vTaskDelete(NULL); 来删除main task
    // vTaskDelete(NULL);
}
确保任务正确运行:当需要执行特定逻辑(如人脸识别和蓝牙连接)时,通常会创建新的 FreeRTOS 任务而不是在 app_main() 中完成所有逻辑。app_main() 函数只负责初始化和创建任务,然后保持应用程序运行。

检查程序逻辑:确保在进行人脸识别和蓝牙连接的流程中,没有代码调用 esp_restart() 或其他重启函数。确保内存和电源稳定。使用 esp_get_free_heap_size() 等函数监视内存情况。

使用深度调试信息:若问题持续,启用更多日志级别(如 debug 或 verbose)可能有助于定位问题根源。


app_main() 函数执行完毕后返回是造成系统重启的主要原因之一。

必须确保 app_main() 不返回,从而维持应用程序的正常运行。

可以通过无限循环 (while(1)) 或使用 FreeRTOS 的任务功能 (vTaskDelete(NULL)) 来防止 app_main() 返回。

void app_main(void)
{
    // 初始化和配置
    ...

    // 创建任务,用于处理人脸识别、蓝牙连接等逻辑
    xTaskCreatePinnedToCore(&face_recognition_task, "face_recog_task", 4096, NULL, 5, NULL, APP_CPU_NUM);
    xTaskCreatePinnedToCore(&ble_connection_task, "ble_conn_task", 4096, NULL, 5, NULL, APP_CPU_NUM);

    // 通过一个无限循环保持 app_main 运行
    while (1) {
      vTaskDelay(pdMS_TO_TICKS(1000));
    }
}

FishC 发表于 2024-11-15 17:13:44

根据您提供的信息,ESP32S3模组在完成特定任务后重启的问题可能由以下几个原因引起:

1. **内存不足**:人脸识别和蓝牙连接都是资源密集型任务,可能导致内存不足,触发看门狗定时器(WDT),从而导致系统重启。请进行内存优化或检查任务的内存使用情况。

2. **功耗问题**:在进行人脸识别或蓝牙活动时,可能导致功耗突然增加,进而影响系统的稳定性。使用足够的稳定电源或者改善电源管理可以缓解这一问题。

3. **代码错误**:检查代码中是否存在逻辑错误,特别是在蓝牙连接和人脸识别模块之间的逻辑交互部分。增加异常处理和调试日志会有所帮助。

4. **硬件限制或故障**:某些GPIO设置或硬件配置错误同样会导致不稳定现象。检查硬件连接和配置,尤其是电压和接地情况。

5. **软件或库版本**:确保使用的软件框架(如ESP-IDF)和相关库是最新稳定版本。

为进一步排查问题,建议:

- 增加系统调试日志,尤其是发生重启前的日志。
- 测试逐步组合功能,看单独或组合任务是否也引发重启。
- 检查看门狗定时器是否在重启时被触发。

根据这些建议进行排查和调试,能更准确锁定问题核心。希望能帮到您!如果问题依然存在,建议与ESP32的技术支持进行详细咨询。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

silver-crow 发表于 2024-11-18 09:16:14

不二如是 发表于 2024-11-15 18:28
根据鱼油提供的日志和描述,ESP32S3 模组在完成某些操作后发生了重启。

在运行日志中可以看到,当 app_m ...

按照您提供的解决方案修改代码后,依然出现重启的状况,串口收到的日志变更为如下的内容:
ESP-ROM:esp32s3-20210327
Build:Mar 27 2021
rst:0xc (RTC_SW_CPU_RST),boot:0xb (SPI_FAST_FLASH_BOOT)
Saved PC:0x40375b10
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fce2810,len:0x178c
load:0x403c8700,len:0x4
load:0x403c8704,len:0xcb8
load:0x403cb700,len:0x2db0
entry 0x403c8914
I (31) boot: ESP-IDF v5.3-dirty 2nd stage bootloader
I (31) boot: compile time Nov 15 2024 08:53:08
I (31) boot: Multicore bootloader
I (35) boot: chip revision: v0.2
I (38) boot.esp32s3: Boot SPI Speed : 80MHz
I (43) boot.esp32s3: SPI Mode       : DIO
I (48) boot.esp32s3: SPI Flash Size : 8MB
I (53) boot: Enabling RNG early entropy source...
I (58) boot: Partition Table:
I (62) boot: ## Label            Usage          Type ST Offset   Length
I (69) boot:0 nvs            WiFi data      01 02 00009000 00006000
I (76) boot:1 phy_init         RF data          01 01 0000f000 00001000
I (84) boot:2 factory          factory app      00 00 00010000 00100000
I (91) boot: End of partition table
I (96) esp_image: segment 0: paddr=00010020 vaddr=3c090020 size=24da8h (150952) map
I (131) esp_image: segment 1: paddr=00034dd0 vaddr=3fc99300 size=04e68h ( 20072) load
I (136) esp_image: segment 2: paddr=00039c40 vaddr=40374000 size=063d8h ( 25560) load
I (142) esp_image: segment 3: paddr=00040020 vaddr=42000020 size=85dc0h (548288) map
I (244) esp_image: segment 4: paddr=000c5de8 vaddr=4037a3d8 size=0eeech ( 61164) load
I (266) boot: Loaded app from partition at offset 0x10000
I (266) boot: Disabling RNG early entropy source...
I (278) cpu_start: Multicore app
I (287) cpu_start: Pro cpu start user code
I (287) cpu_start: cpu freq: 240000000 Hz
I (288) app_init: Application information:
I (290) app_init: Project name:   ble_2
I (295) app_init: App version:      1
I (299) app_init: Compile time:   Nov 15 2024 08:52:52
I (305) app_init: ELF file SHA256:214803702...
I (311) app_init: ESP-IDF:          v5.3-dirty
I (316) efuse_init: Min chip rev:   v0.0
I (321) efuse_init: Max chip rev:   v0.99 
I (326) efuse_init: Chip rev:         v0.2
I (330) heap_init: Initializing. RAM available for dynamic allocation:
I (338) heap_init: At 3FCA41C8 len 00045548 (277 KiB): RAM
I (344) heap_init: At 3FCE9710 len 00005724 (21 KiB): RAM
I (350) heap_init: At 3FCF0000 len 00008000 (32 KiB): DRAM
I (356) heap_init: At 600FE100 len 00001EE8 (7 KiB): RTCRAM
I (363) spi_flash: detected chip: generic
I (367) spi_flash: flash io: dio
W (371) spi_flash: Detected size(16384k) larger than the size in the binary image header(8192k). Using the size in the binary image header.
W (384) ADC: legacy driver is deprecated, please migrate to `esp_adc/adc_oneshot.h`
I (393) sleep: Configure to isolate all GPIO pins in sleep state
I (399) sleep: Enable automatic switching of GPIO sleep configuration
I (406) coexist: coex firmware version: dab85ae96
I (412) coexist: coexist rom version e7ae62f
I (417) main_task: Started on CPU0
I (427) main_task: Calling app_main()
| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 

I (637) BLE_INIT: Bluetooth MAC: 3c:84:27:c0:33:3e
I (637) phy_init: phy_version 680,a6008b2,Jun4 2024,16:41:10
I (697) uart: queue free spaces: 20
E (697) gptimer: gptimer_stop(418): timer is not running
I (697) main: Read succ
I (697) GATTS_TABLE_DEMO: create attribute table successfully, the number handle = 13

I (707) main: Read fail
I (707) GATTS_TABLE_DEMO: advertising start successfully
I (707) main: Read fail
I (717) main: Read fail
I (727) main: Read fail
I (727) main: Read fail
I (727) main: Read fail
I (727) main: Read fail
I (737) main: Read fail
I (737) main: Read fail
I (737) main: Read fail
I (747) main: Read fail
I (747) main: Read fail
I (747) main: Read fail
I (757) main: Read fail
I (757) main: Read fail
I (757) main: Read fail
I (767) main: Read fail
I (767) main: Read fail
I (767) main: Read fail
I (777) main: Read fail
I (777) main: Read fail
I (777) main: Read fail
I (777) main: Read fail
I (787) main: Read fail
I (787) main: Read fail
I (787) main: Read fail
I (797) main: Read fail
I (797) main: Read fail
I (797) main: Read fail
I (807) main: Read fail
I (807) main: Read fail
I (807) main: Read fail
I (817) main: Read fail
I (817) main: Read fail
I (817) main: Read fail
I (827) main: Read fail
I (827) main: Read fail
I (827) main: Read fail
I (827) main: Read fail
I (837) main: Read fail
I (837) main: Read fail
I (837) main: Read fail
I (847) main: Read fail
I (847) main: Read fail
I (847) main: Read fail
I (857) main: Read fail
I (857) main: Read fail
I (857) main: Read fail
I (867) main: Read fail
I (867) main: TotalFaceInfoNum = 1
I (867) main: Read succ
I (877) main: Read succ
I (877) main: Read succ
I (877) main: Read succ
I (887) main: Read succ
I (887) main: Read succ
I (887) main: Read succ
I (897) main: Read succ
I (897) main: Read succ
I (897) main: Read succ
I (897) main: TotalUsageRecordNum = 10
I (907) timer: minute cnt = 20
页: [1]
查看完整版本: 求助