鱼C论坛

 找回密码
 立即注册
查看: 50|回复: 2

求助

[复制链接]
发表于 昨天 17:13 | 显示全部楼层 |阅读模式
50鱼币
使用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()
I (429) gpio: GPIO[1]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
I (439) gpio: GPIO[2]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
I (449) gpio: GPIO[3]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
I (459) gpio: GPIO[6]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
I (459) gpio: GPIO[7]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
I (469) gpio: GPIO[8]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
I (479) gpio: GPIO[9]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
I (489) gpio: GPIO[12]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
I (499) gpio: GPIO[19]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
I (509) gpio: GPIO[20]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
I (519) gpio: GPIO[21]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
I (639) BLE_INIT: BT controller compile version [ba3b3e3]
I (639) BLE_INIT: Bluetooth MAC: 3c:84:27:c0:33:3e
I (639) phy_init: phy_version 680,a6008b2,Jun  4 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()

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 昨天 17:13 | 显示全部楼层
根据您提供的信息,ESP32S3模组在完成特定任务后重启的问题可能由以下几个原因引起:

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

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

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

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

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

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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 昨天 18:28 | 显示全部楼层
根据鱼油提供的日志和描述,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));
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-16 14:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表