fix(ulp): improve ULP examples for users using usb-jtag-serial

When using USB-serial-jtag for monitoring idf-monitor will lose connection
during deep sleep (because the peripheral powers down) and will need
some time to reconnect when we wake-up. In the ULP examples this would result in
the chip waking up->printing-> going back to sleep, before idf-monitor is even able
to connect, and users would erroneously assume the chip never woke up.

Add a 1 sec delay at the start of the examples to improve the user experience when
using jtag-serial.
This commit is contained in:
Marius Vikhammer
2024-01-15 13:01:59 +08:00
parent 58fb179845
commit 9d41418bd2
13 changed files with 113 additions and 13 deletions
@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Unlicense OR CC0-1.0
*/
@@ -24,6 +24,8 @@
#include "driver/rtc_io.h"
#include "ulp.h"
#include "ulp_main.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
extern const uint8_t ulp_main_bin_start[] asm("_binary_ulp_main_bin_start");
extern const uint8_t ulp_main_bin_end[] asm("_binary_ulp_main_bin_end");
@@ -33,6 +35,13 @@ static void update_pulse_count(void);
void app_main(void)
{
/* If user is using USB-serial-jtag then idf monitor needs some time to
* re-connect to the USB port. We wait 1 sec here to allow for it to make the reconnection
* before we print anything. Otherwise the chip will go back to sleep again before the user
* has time to monitor any output.
*/
vTaskDelay(pdMS_TO_TICKS(1000));
esp_sleep_wakeup_cause_t cause = esp_sleep_get_wakeup_cause();
if (cause != ESP_SLEEP_WAKEUP_ULP) {
printf("Not ULP wakeup, initializing ULP\n");