Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Calling ESP_LOGI from a critical section of a task function (IDFGH-5076) #6860

Closed
4 tasks
norventa opened this issue Apr 12, 2021 · 2 comments
Closed
4 tasks
Labels
Resolution: Won't Do This will not be worked on Status: Done Issue is done internally

Comments

@norventa
Copy link

Environment

  • Development Kit: [none]
  • Module or chip used: ESP32-WROOM-32]
  • IDF version (run git describe --tags to find it):
    3.40200.210118
  • Build System: [CMake]
  • Compiler version (run xtensa-esp32-elf-gcc --version to find it):
    PACKAGES:
  • framework-espidf 3.40200.210118 (4.2.0)
  • tool-cmake 3.16.4
  • tool-esptoolpy 1.30000.201119 (3.0.0)
  • tool-idf 1.0.1
  • tool-mconf 1.4060000.20190628 (406.0.0)
  • tool-ninja 1.9.0
  • tool-openocd-esp32 2.1000.20201202 (10.0)
  • toolchain-esp32ulp 1.22851.191205 (2.28.51)
  • toolchain-xtensa32 2.80400.210211 (8.4.0)
  • Operating System: [Windows]
  • (Windows only) environment type: [Platformio].
  • Using an IDE?: [No Platformio]
  • Power Supply: [external 3.3V]

Problem Description

// From a task function:

portMUX_TYPE mutex = portMUX_INITIALIZER_UNLOCKED;

void taskfn(void *)
{
do
{
portENTER_CRITICAL(&mutex);
ESP_LOGI("test", "Hello");
portEXIT_CRITICAL(&mutex);
} while (1);
}

Expected Behavior

Output log.

Actual Behavior

locks.c throws a wobbly (look for HERE in code below):

When xPortCanYield() is called it is used to determine if in an interrupt context or in a task context. It mistakenly believes it to be an interrupt context.

// From locks.c
/* Acquire the mutex semaphore for lock. wait up to delay ticks.
   mutex_type is queueQUEUE_TYPE_RECURSIVE_MUTEX or queueQUEUE_TYPE_MUTEX
*/
static int IRAM_ATTR lock_acquire_generic(_lock_t *lock, uint32_t delay, uint8_t mutex_type) {
    xSemaphoreHandle h = (xSemaphoreHandle)(*lock);
    if (!h) {
        if (xTaskGetSchedulerState() == taskSCHEDULER_NOT_STARTED) {
            return 0; /* locking is a no-op before scheduler is up, so this "succeeds" */
        }
        /* lazy initialise lock - might have had a static initializer in newlib (that we don't use),
           or _lock_init might have been called before the scheduler was running... */
        lock_init_generic(lock, mutex_type);
        h = (xSemaphoreHandle)(*lock);
        configASSERT(h != NULL);
    }

    BaseType_t success;
    if (!xPortCanYield()) {
        /* In ISR Context */
        if (mutex_type == queueQUEUE_TYPE_RECURSIVE_MUTEX) {

// HERE
            abort(); /* recursive mutexes make no sense in ISR context */

        }
        BaseType_t higher_task_woken = false;
        success = xSemaphoreTakeFromISR(h, &higher_task_woken);
        if (!success && delay > 0) {
            abort(); /* Tried to block on mutex from ISR, couldn't... rewrite your program to avoid libc interactions in ISRs! */
        }
        if (higher_task_woken) {
            portYIELD_FROM_ISR();
        }
    }
    else {
        /* In task context */
        if (mutex_type == queueQUEUE_TYPE_RECURSIVE_MUTEX) {
            success = xSemaphoreTakeRecursive(h, delay);
        } else {
            success = xSemaphoreTake(h, delay);
        }
    }

    return (success == pdTRUE) ? 0 : -1;
}

Debug Logs

#0 0x40086377:0x3ffd07e0 in panic_abort at C:\Users\Dougi.platformio\packages\framework-espidf\components\esp_system/panic.c:330
#1 0x40086a15:0x3ffd0800 in esp_system_abort at C:\Users\Dougi.platformio\packages\framework-espidf\components\esp_system/system_api.c:106
#2 0x4008a1fa:0x3ffd0820 in abort at C:\Users\Dougi.platformio\packages\framework-espidf\components\newlib/abort.c:46
#3 0x400835b6:0x3ffd0890 in lock_acquire_generic at C:\Users\Dougi.platformio\packages\framework-espidf\components\newlib/locks.c:142
#4 0x400836d9:0x3ffd08c0 in _lock_acquire_recursive at C:\Users\Dougi.platformio\packages\framework-espidf\components\newlib/locks.c:170
#5 0x400f1e96:0x3ffd08e0 in _vfprintf_r at /builds/idf/crosstool-NG/.build/HOST-x86_64-w64-mingw32/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/vfprintf.c:853 (discriminator 2)
#6 0x400f4ed5:0x3ffd0bf0 in vprintf at /builds/idf/crosstool-NG/.build/HOST-x86_64-w64-mingw32/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/vprintf.c:34 (discriminator 5)
#7 0x400fcfc1:0x3ffd0c20 in esp_log_writev at C:\Users\Dougi.platformio\packages\framework-espidf\components\log/log.c:189
#8 0x4008a08d:0x3ffd0c50 in esp_log_write at C:\Users\Dougi.platformio\packages\framework-espidf\components\log/log.c:199
#9 0x400d61fe:0x3ffd0ca0 in setPower(unsigned int, double, unsigned int) at src/Program.cpp:259
#10 0x400d62c5:0x3ffd0da0 in doRateStep(DFiringStep const&, unsigned int) at src/Program.cpp:302
#11 0x400d6504:0x3ffd0dd0 in doRun() at src/Program.cpp:418
#12 0x400d65af:0x3ffd0e20 in TaskFn(void*) at src/Program.cpp:470
#13 0x40086a1d:0x3ffd0e40 in vPortTaskWrapper at C:\Users\Dougi.platformio\packages\framework-espidf\components\freertos\xtensa/port.c:143

Other items if possible

  • sdkconfig file (attach the sdkconfig file from your project folder)
  • /*
  • Automatically generated file. DO NOT EDIT.
  • Espressif IoT Development Framework (ESP-IDF) Configuration Header
    */
    #pragma once
    #define CONFIG_IDF_CMAKE 1
    #define CONFIG_IDF_TARGET "esp32"
    #define CONFIG_IDF_TARGET_ESP32 1
    #define CONFIG_IDF_FIRMWARE_CHIP_ID 0x0000
    #define CONFIG_SDK_TOOLPREFIX "xtensa-esp32-elf-"
    #define CONFIG_APP_BUILD_TYPE_APP_2NDBOOT 1
    #define CONFIG_APP_BUILD_GENERATE_BINARIES 1
    #define CONFIG_APP_BUILD_BOOTLOADER 1
    #define CONFIG_APP_BUILD_USE_FLASH_SECTIONS 1
    #define CONFIG_APP_COMPILE_TIME_DATE 1
    #define CONFIG_APP_RETRIEVE_LEN_ELF_SHA 16
    #define CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE 1
    #define CONFIG_BOOTLOADER_LOG_LEVEL_INFO 1
    #define CONFIG_BOOTLOADER_LOG_LEVEL 3
    #define CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V 1
    #define CONFIG_BOOTLOADER_WDT_ENABLE 1
    #define CONFIG_BOOTLOADER_WDT_TIME_MS 9000
    #define CONFIG_BOOTLOADER_RESERVE_RTC_SIZE 0x0
    #define CONFIG_ESPTOOLPY_BAUD_OTHER_VAL 115200
    #define CONFIG_ESPTOOLPY_WITH_STUB 1
    #define CONFIG_ESPTOOLPY_FLASHMODE_DIO 1
    #define CONFIG_ESPTOOLPY_FLASHMODE "dio"
    #define CONFIG_ESPTOOLPY_FLASHFREQ_40M 1
    #define CONFIG_ESPTOOLPY_FLASHFREQ "40m"
    #define CONFIG_ESPTOOLPY_FLASHSIZE_2MB 1
    #define CONFIG_ESPTOOLPY_FLASHSIZE "2MB"
    #define CONFIG_ESPTOOLPY_FLASHSIZE_DETECT 1
    #define CONFIG_ESPTOOLPY_BEFORE_RESET 1
    #define CONFIG_ESPTOOLPY_BEFORE "default_reset"
    #define CONFIG_ESPTOOLPY_AFTER_RESET 1
    #define CONFIG_ESPTOOLPY_AFTER "hard_reset"
    #define CONFIG_ESPTOOLPY_MONITOR_BAUD_115200B 1
    #define CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER_VAL 115200
    #define CONFIG_ESPTOOLPY_MONITOR_BAUD 115200
    #define CONFIG_PARTITION_TABLE_SINGLE_APP 1
    #define CONFIG_PARTITION_TABLE_CUSTOM_FILENAME "partitions.csv"
    #define CONFIG_PARTITION_TABLE_FILENAME "partitions_singleapp.csv"
    #define CONFIG_PARTITION_TABLE_OFFSET 0x8000
    #define CONFIG_PARTITION_TABLE_MD5 1
    #define CONFIG_COMPILER_OPTIMIZATION_DEFAULT 1
    #define CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE 1
    #define CONFIG_COMPILER_STACK_CHECK_MODE_NONE 1
    #define CONFIG_APPTRACE_DEST_NONE 1
    #define CONFIG_APPTRACE_LOCK_ENABLE 1
    #define CONFIG_BTDM_CTRL_BR_EDR_SCO_DATA_PATH_EFF 0
    #define CONFIG_BTDM_CTRL_PCM_ROLE_EFF 0
    #define CONFIG_BTDM_CTRL_PCM_POLAR_EFF 0
    #define CONFIG_BTDM_CTRL_BLE_MAX_CONN_EFF 0
    #define CONFIG_BTDM_CTRL_BR_EDR_MAX_ACL_CONN_EFF 0
    #define CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN_EFF 0
    #define CONFIG_BTDM_CTRL_PINNED_TO_CORE 0
    #define CONFIG_BTDM_BLE_SLEEP_CLOCK_ACCURACY_INDEX_EFF 1
    #define CONFIG_BT_RESERVE_DRAM 0x0
    #define CONFIG_COAP_MBEDTLS_PSK 1
    #define CONFIG_COAP_LOG_DEFAULT_LEVEL 0
    #define CONFIG_ADC_DISABLE_DAC 1
    #define CONFIG_SPI_MASTER_ISR_IN_IRAM 1
    #define CONFIG_SPI_SLAVE_ISR_IN_IRAM 1
    #define CONFIG_EFUSE_CODE_SCHEME_COMPAT_3_4 1
    #define CONFIG_EFUSE_MAX_BLK_LEN 192
    #define CONFIG_ESP_TLS_USING_MBEDTLS 1
    #define CONFIG_ESP32_REV_MIN_0 1
    #define CONFIG_ESP32_REV_MIN 0
    #define CONFIG_ESP32_DPORT_WORKAROUND 1
    #define CONFIG_ESP32_DEFAULT_CPU_FREQ_160 1
    #define CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ 160
    #define CONFIG_ESP32_TRACEMEM_RESERVE_DRAM 0x0
    #define CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR 1
    #define CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES 4
    #define CONFIG_ESP32_ULP_COPROC_RESERVE_MEM 0
    #define CONFIG_ESP32_DEBUG_OCDAWARE 1
    #define CONFIG_ESP32_BROWNOUT_DET 1
    #define CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0 1
    #define CONFIG_ESP32_BROWNOUT_DET_LVL 0
    #define CONFIG_ESP32_REDUCE_PHY_TX_POWER 1
    #define CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1 1
    #define CONFIG_ESP32_RTC_CLK_SRC_INT_RC 1
    #define CONFIG_ESP32_RTC_CLK_CAL_CYCLES 1024
    #define CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY 2000
    #define CONFIG_ESP32_XTAL_FREQ_40 1
    #define CONFIG_ESP32_XTAL_FREQ 40
    #define CONFIG_ESP32_DPORT_DIS_INTERRUPT_LVL 5
    #define CONFIG_ADC_CAL_EFUSE_TP_ENABLE 1
    #define CONFIG_ADC_CAL_EFUSE_VREF_ENABLE 1
    #define CONFIG_ADC_CAL_LUT_ENABLE 1
    #define CONFIG_ESP_ERR_TO_NAME_LOOKUP 1
    #define CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE 32
    #define CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE 2304
    #define CONFIG_ESP_MAIN_TASK_STACK_SIZE 3584
    #define CONFIG_ESP_IPC_TASK_STACK_SIZE 1024
    #define CONFIG_ESP_IPC_USES_CALLERS_PRIORITY 1
    #define CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE 2048
    #define CONFIG_ESP_CONSOLE_UART_DEFAULT 1
    #define CONFIG_ESP_CONSOLE_UART_NUM 0
    #define CONFIG_ESP_CONSOLE_UART_TX_GPIO 1
    #define CONFIG_ESP_CONSOLE_UART_RX_GPIO 3
    #define CONFIG_ESP_CONSOLE_UART_BAUDRATE 115200
    #define CONFIG_ESP_INT_WDT 1
    #define CONFIG_ESP_INT_WDT_TIMEOUT_MS 300
    #define CONFIG_ESP_INT_WDT_CHECK_CPU1 1
    #define CONFIG_ESP_TASK_WDT 1
    #define CONFIG_ESP_TASK_WDT_TIMEOUT_S 5
    #define CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0 1
    #define CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1 1
    #define CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA 1
    #define CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP 1
    #define CONFIG_ESP_MAC_ADDR_UNIVERSE_BT 1
    #define CONFIG_ESP_MAC_ADDR_UNIVERSE_BT_OFFSET 2
    #define CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH 1
    #define CONFIG_ETH_ENABLED 1
    #define CONFIG_ETH_USE_ESP32_EMAC 1
    #define CONFIG_ETH_PHY_INTERFACE_RMII 1
    #define CONFIG_ETH_RMII_CLK_INPUT 1
    #define CONFIG_ETH_RMII_CLK_IN_GPIO 0
    #define CONFIG_ETH_DMA_BUFFER_SIZE 512
    #define CONFIG_ETH_DMA_RX_BUFFER_NUM 10
    #define CONFIG_ETH_DMA_TX_BUFFER_NUM 10
    #define CONFIG_ETH_USE_SPI_ETHERNET 1
    #define CONFIG_ETH_SPI_ETHERNET_DM9051 1
    #define CONFIG_ESP_EVENT_POST_FROM_ISR 1
    #define CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR 1
    #define CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS 1
    #define CONFIG_HTTPD_MAX_REQ_HDR_LEN 512
    #define CONFIG_HTTPD_MAX_URI_LEN 512
    #define CONFIG_HTTPD_ERR_RESP_NO_DELAY 1
    #define CONFIG_HTTPD_PURGE_BUF_LEN 32
    #define CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL 120
    #define CONFIG_ESP_NETIF_TCPIP_LWIP 1
    #define CONFIG_ESP_NETIF_TCPIP_ADAPTER_COMPATIBLE_LAYER 1
    #define CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT 1
    #define CONFIG_ESP_TIMER_TASK_STACK_SIZE 3584
    #define CONFIG_ESP_TIMER_IMPL_TG0_LAC 1
    #define CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM 10
    #define CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM 32
    #define CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER 1
    #define CONFIG_ESP32_WIFI_TX_BUFFER_TYPE 1
    #define CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM 32
    #define CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED 1
    #define CONFIG_ESP32_WIFI_TX_BA_WIN 6
    #define CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED 1
    #define CONFIG_ESP32_WIFI_RX_BA_WIN 6
    #define CONFIG_ESP32_WIFI_NVS_ENABLED 1
    #define CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0 1
    #define CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN 752
    #define CONFIG_ESP32_WIFI_MGMT_SBUF_NUM 32
    #define CONFIG_ESP32_WIFI_IRAM_OPT 1
    #define CONFIG_ESP32_WIFI_RX_IRAM_OPT 1
    #define CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE 1
    #define CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE 1
    #define CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER 20
    #define CONFIG_ESP32_PHY_MAX_TX_POWER 20
    #define CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE 1
    #define CONFIG_FATFS_CODEPAGE_437 1
    #define CONFIG_FATFS_CODEPAGE 437
    #define CONFIG_FATFS_LFN_NONE 1
    #define CONFIG_FATFS_FS_LOCK 0
    #define CONFIG_FATFS_TIMEOUT_MS 10000
    #define CONFIG_FATFS_PER_FILE_CACHE 1
    #define CONFIG_FMB_COMM_MODE_RTU_EN 1
    #define CONFIG_FMB_COMM_MODE_ASCII_EN 1
    #define CONFIG_FMB_MASTER_TIMEOUT_MS_RESPOND 150
    #define CONFIG_FMB_MASTER_DELAY_MS_CONVERT 200
    #define CONFIG_FMB_QUEUE_LENGTH 20
    #define CONFIG_FMB_SERIAL_TASK_STACK_SIZE 2048
    #define CONFIG_FMB_SERIAL_BUF_SIZE 256
    #define CONFIG_FMB_SERIAL_ASCII_BITS_PER_SYMB 8
    #define CONFIG_FMB_SERIAL_ASCII_TIMEOUT_RESPOND_MS 1000
    #define CONFIG_FMB_SERIAL_TASK_PRIO 10
    #define CONFIG_FMB_CONTROLLER_NOTIFY_TIMEOUT 20
    #define CONFIG_FMB_CONTROLLER_NOTIFY_QUEUE_SIZE 20
    #define CONFIG_FMB_CONTROLLER_STACK_SIZE 4096
    #define CONFIG_FMB_EVENT_QUEUE_TIMEOUT 20
    #define CONFIG_FMB_TIMER_PORT_ENABLED 1
    #define CONFIG_FMB_TIMER_GROUP 0
    #define CONFIG_FMB_TIMER_INDEX 0
    #define CONFIG_FREERTOS_NO_AFFINITY 0x7FFFFFFF
    #define CONFIG_FREERTOS_CORETIMER_0 1
    #define CONFIG_FREERTOS_HZ 1000
    #define CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION 1
    #define CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY 1
    #define CONFIG_FREERTOS_INTERRUPT_BACKTRACE 1
    #define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
    #define CONFIG_FREERTOS_ASSERT_FAIL_ABORT 1
    #define CONFIG_FREERTOS_IDLE_TASK_STACKSIZE 1536
    #define CONFIG_FREERTOS_ISR_STACKSIZE 1536
    #define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 16
    #define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
    #define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
    #define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
    #define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
    #define CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER 1
    #define CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER 1
    #define CONFIG_FREERTOS_DEBUG_OCDAWARE 1
    #define CONFIG_HEAP_POISONING_DISABLED 1
    #define CONFIG_HEAP_TRACING_OFF 1
    #define CONFIG_LOG_DEFAULT_LEVEL_WARN 1
    #define CONFIG_LOG_DEFAULT_LEVEL 2
    #define CONFIG_LOG_TIMESTAMP_SOURCE_RTOS 1
    #define CONFIG_LWIP_LOCAL_HOSTNAME "espressif"
    #define CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES 1
    #define CONFIG_LWIP_TIMERS_ONDEMAND 1
    #define CONFIG_LWIP_MAX_SOCKETS 10
    #define CONFIG_LWIP_SO_REUSE 1
    #define CONFIG_LWIP_SO_REUSE_RXTOALL 1
    #define CONFIG_LWIP_IP4_FRAG 1
    #define CONFIG_LWIP_IP6_FRAG 1
    #define CONFIG_LWIP_ESP_GRATUITOUS_ARP 1
    #define CONFIG_LWIP_GARP_TMR_INTERVAL 60
    #define CONFIG_LWIP_TCPIP_RECVMBOX_SIZE 32
    #define CONFIG_LWIP_DHCP_DOES_ARP_CHECK 1
    #define CONFIG_LWIP_DHCPS_LEASE_UNIT 60
    #define CONFIG_LWIP_DHCPS_MAX_STATION_NUM 8
    #define CONFIG_LWIP_NETIF_LOOPBACK 1
    #define CONFIG_LWIP_LOOPBACK_MAX_PBUFS 8
    #define CONFIG_LWIP_MAX_ACTIVE_TCP 16
    #define CONFIG_LWIP_MAX_LISTENING_TCP 16
    #define CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION 1
    #define CONFIG_LWIP_TCP_MAXRTX 12
    #define CONFIG_LWIP_TCP_SYNMAXRTX 6
    #define CONFIG_LWIP_TCP_MSS 1440
    #define CONFIG_LWIP_TCP_TMR_INTERVAL 250
    #define CONFIG_LWIP_TCP_MSL 60000
    #define CONFIG_LWIP_TCP_SND_BUF_DEFAULT 5744
    #define CONFIG_LWIP_TCP_WND_DEFAULT 5744
    #define CONFIG_LWIP_TCP_RECVMBOX_SIZE 6
    #define CONFIG_LWIP_TCP_QUEUE_OOSEQ 1
    #define CONFIG_LWIP_TCP_OVERSIZE_MSS 1
    #define CONFIG_LWIP_TCP_RTO_TIME 1500
    #define CONFIG_LWIP_MAX_UDP_PCBS 16
    #define CONFIG_LWIP_UDP_RECVMBOX_SIZE 6
    #define CONFIG_LWIP_TCPIP_TASK_STACK_SIZE 3072
    #define CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY 1
    #define CONFIG_LWIP_TCPIP_TASK_AFFINITY 0x7FFFFFFF
    #define CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE 3
    #define CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS 5
    #define CONFIG_LWIP_MAX_RAW_PCBS 16
    #define CONFIG_LWIP_DHCP_MAX_NTP_SERVERS 1
    #define CONFIG_LWIP_SNTP_UPDATE_DELAY 3600000
    #define CONFIG_LWIP_ESP_LWIP_ASSERT 1
    #define CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC 1
    #define CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN 1
    #define CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN 16384
    #define CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN 4096
    #define CONFIG_MBEDTLS_CERTIFICATE_BUNDLE 1
    #define CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL 1
    #define CONFIG_MBEDTLS_HARDWARE_AES 1
    #define CONFIG_MBEDTLS_HARDWARE_MPI 1
    #define CONFIG_MBEDTLS_HARDWARE_SHA 1
    #define CONFIG_MBEDTLS_HAVE_TIME 1
    #define CONFIG_MBEDTLS_ECDSA_DETERMINISTIC 1
    #define CONFIG_MBEDTLS_SHA512_C 1
    #define CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT 1
    #define CONFIG_MBEDTLS_TLS_SERVER 1
    #define CONFIG_MBEDTLS_TLS_CLIENT 1
    #define CONFIG_MBEDTLS_TLS_ENABLED 1
    #define CONFIG_MBEDTLS_KEY_EXCHANGE_RSA 1
    #define CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA 1
    #define CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE 1
    #define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA 1
    #define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA 1
    #define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA 1
    #define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA 1
    #define CONFIG_MBEDTLS_SSL_RENEGOTIATION 1
    #define CONFIG_MBEDTLS_SSL_PROTO_TLS1 1
    #define CONFIG_MBEDTLS_SSL_PROTO_TLS1_1 1
    #define CONFIG_MBEDTLS_SSL_PROTO_TLS1_2 1
    #define CONFIG_MBEDTLS_SSL_ALPN 1
    #define CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS 1
    #define CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS 1
    #define CONFIG_MBEDTLS_AES_C 1
    #define CONFIG_MBEDTLS_RC4_DISABLED 1
    #define CONFIG_MBEDTLS_CCM_C 1
    #define CONFIG_MBEDTLS_GCM_C 1
    #define CONFIG_MBEDTLS_PEM_PARSE_C 1
    #define CONFIG_MBEDTLS_PEM_WRITE_C 1
    #define CONFIG_MBEDTLS_X509_CRL_PARSE_C 1
    #define CONFIG_MBEDTLS_X509_CSR_PARSE_C 1
    #define CONFIG_MBEDTLS_ECP_C 1
    #define CONFIG_MBEDTLS_ECDH_C 1
    #define CONFIG_MBEDTLS_ECDSA_C 1
    #define CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED 1
    #define CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED 1
    #define CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED 1
    #define CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED 1
    #define CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED 1
    #define CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED 1
    #define CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED 1
    #define CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED 1
    #define CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED 1
    #define CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED 1
    #define CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED 1
    #define CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED 1
    #define CONFIG_MBEDTLS_ECP_NIST_OPTIM 1
    #define CONFIG_MDNS_MAX_SERVICES 10
    #define CONFIG_MDNS_TASK_PRIORITY 1
    #define CONFIG_MDNS_TASK_STACK_SIZE 4096
    #define CONFIG_MDNS_TASK_AFFINITY_CPU0 1
    #define CONFIG_MDNS_TASK_AFFINITY 0x0
    #define CONFIG_MDNS_SERVICE_ADD_TIMEOUT_MS 2000
    #define CONFIG_MDNS_TIMER_PERIOD_MS 100
    #define CONFIG_MQTT_PROTOCOL_311 1
    #define CONFIG_MQTT_TRANSPORT_SSL 1
    #define CONFIG_MQTT_TRANSPORT_WEBSOCKET 1
    #define CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE 1
    #define CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF 1
    #define CONFIG_NEWLIB_STDIN_LINE_ENDING_CR 1
    #define CONFIG_OPENSSL_ASSERT_EXIT 1
    #define CONFIG_PTHREAD_TASK_PRIO_DEFAULT 5
    #define CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT 3072
    #define CONFIG_PTHREAD_STACK_MIN 768
    #define CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY 1
    #define CONFIG_PTHREAD_TASK_CORE_DEFAULT -1
    #define CONFIG_PTHREAD_TASK_NAME_DEFAULT "pthread"
    #define CONFIG_SPI_FLASH_ROM_DRIVER_PATCH 1
    #define CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS 1
    #define CONFIG_SPI_FLASH_YIELD_DURING_ERASE 1
    #define CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS 20
    #define CONFIG_SPI_FLASH_ERASE_YIELD_TICKS 1
    #define CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP 1
    #define CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP 1
    #define CONFIG_SPI_FLASH_SUPPORT_GD_CHIP 1
    #define CONFIG_SPIFFS_MAX_PARTITIONS 3
    #define CONFIG_SPIFFS_CACHE 1
    #define CONFIG_SPIFFS_CACHE_WR 1
    #define CONFIG_SPIFFS_PAGE_CHECK 1
    #define CONFIG_SPIFFS_GC_MAX_RUNS 10
    #define CONFIG_SPIFFS_PAGE_SIZE 256
    #define CONFIG_SPIFFS_OBJ_NAME_LEN 32
    #define CONFIG_SPIFFS_USE_MAGIC 1
    #define CONFIG_SPIFFS_USE_MAGIC_LENGTH 1
    #define CONFIG_SPIFFS_META_LENGTH 4
    #define CONFIG_SPIFFS_USE_MTIME 1
    #define CONFIG_USB_DESC_CUSTOM_VID 0x1234
    #define CONFIG_USB_DESC_CUSTOM_PID 0x5678
    #define CONFIG_UNITY_ENABLE_FLOAT 1
    #define CONFIG_UNITY_ENABLE_DOUBLE 1
    #define CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER 1
    #define CONFIG_VFS_SUPPORT_IO 1
    #define CONFIG_VFS_SUPPORT_DIR 1
    #define CONFIG_VFS_SUPPORT_SELECT 1
    #define CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT 1
    #define CONFIG_VFS_SUPPORT_TERMIOS 1
    #define CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS 1
    #define CONFIG_VFS_SEMIHOSTFS_HOST_PATH_MAX_LEN 128
    #define CONFIG_WL_SECTOR_SIZE_4096 1
    #define CONFIG_WL_SECTOR_SIZE 4096
    #define CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES 16
    #define CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT 30
    #define CONFIG_WPA_MBEDTLS_CRYPTO 1

/* List of deprecated options */
#define CONFIG_ADC2_DISABLE_DAC CONFIG_ADC_DISABLE_DAC
#define CONFIG_BROWNOUT_DET CONFIG_ESP32_BROWNOUT_DET
#define CONFIG_BROWNOUT_DET_LVL_SEL_0 CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0
#define CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG CONFIG_COMPILER_OPTIMIZATION_DEFAULT
#define CONFIG_CONSOLE_UART_BAUDRATE CONFIG_ESP_CONSOLE_UART_BAUDRATE
#define CONFIG_CONSOLE_UART_DEFAULT CONFIG_ESP_CONSOLE_UART_DEFAULT
#define CONFIG_CONSOLE_UART_RX_GPIO CONFIG_ESP_CONSOLE_UART_RX_GPIO
#define CONFIG_CONSOLE_UART_TX_GPIO CONFIG_ESP_CONSOLE_UART_TX_GPIO
#define CONFIG_ESP32S2_PANIC_PRINT_REBOOT CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT
#define CONFIG_ESP32_APPTRACE_DEST_NONE CONFIG_APPTRACE_DEST_NONE
#define CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY
#define CONFIG_ESP32_PANIC_PRINT_REBOOT CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT
#define CONFIG_ESP32_PTHREAD_STACK_MIN CONFIG_PTHREAD_STACK_MIN
#define CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT CONFIG_PTHREAD_TASK_NAME_DEFAULT
#define CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT CONFIG_PTHREAD_TASK_PRIO_DEFAULT
#define CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT
#define CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC CONFIG_ESP32_RTC_CLK_SRC_INT_RC
#define CONFIG_ESP_GRATUITOUS_ARP CONFIG_LWIP_ESP_GRATUITOUS_ARP
#define CONFIG_FLASHMODE_DIO CONFIG_ESPTOOLPY_FLASHMODE_DIO
#define CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR
#define CONFIG_GARP_TMR_INTERVAL CONFIG_LWIP_GARP_TMR_INTERVAL
#define CONFIG_INT_WDT CONFIG_ESP_INT_WDT
#define CONFIG_INT_WDT_CHECK_CPU1 CONFIG_ESP_INT_WDT_CHECK_CPU1
#define CONFIG_INT_WDT_TIMEOUT_MS CONFIG_ESP_INT_WDT_TIMEOUT_MS
#define CONFIG_IPC_TASK_STACK_SIZE CONFIG_ESP_IPC_TASK_STACK_SIZE
#define CONFIG_LOG_BOOTLOADER_LEVEL_INFO CONFIG_BOOTLOADER_LOG_LEVEL_INFO
#define CONFIG_MAIN_TASK_STACK_SIZE CONFIG_ESP_MAIN_TASK_STACK_SIZE
#define CONFIG_MB_CONTROLLER_NOTIFY_QUEUE_SIZE CONFIG_FMB_CONTROLLER_NOTIFY_QUEUE_SIZE
#define CONFIG_MB_CONTROLLER_NOTIFY_TIMEOUT CONFIG_FMB_CONTROLLER_NOTIFY_TIMEOUT
#define CONFIG_MB_CONTROLLER_STACK_SIZE CONFIG_FMB_CONTROLLER_STACK_SIZE
#define CONFIG_MB_EVENT_QUEUE_TIMEOUT CONFIG_FMB_EVENT_QUEUE_TIMEOUT
#define CONFIG_MB_MASTER_DELAY_MS_CONVERT CONFIG_FMB_MASTER_DELAY_MS_CONVERT
#define CONFIG_MB_MASTER_TIMEOUT_MS_RESPOND CONFIG_FMB_MASTER_TIMEOUT_MS_RESPOND
#define CONFIG_MB_QUEUE_LENGTH CONFIG_FMB_QUEUE_LENGTH
#define CONFIG_MB_SERIAL_BUF_SIZE CONFIG_FMB_SERIAL_BUF_SIZE
#define CONFIG_MB_SERIAL_TASK_PRIO CONFIG_FMB_SERIAL_TASK_PRIO
#define CONFIG_MB_SERIAL_TASK_STACK_SIZE CONFIG_FMB_SERIAL_TASK_STACK_SIZE
#define CONFIG_MB_TIMER_GROUP CONFIG_FMB_TIMER_GROUP
#define CONFIG_MB_TIMER_INDEX CONFIG_FMB_TIMER_INDEX
#define CONFIG_MB_TIMER_PORT_ENABLED CONFIG_FMB_TIMER_PORT_ENABLED
#define CONFIG_MONITOR_BAUD_115200B CONFIG_ESPTOOLPY_MONITOR_BAUD_115200B
#define CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE
#define CONFIG_OPTIMIZATION_LEVEL_DEBUG CONFIG_COMPILER_OPTIMIZATION_DEFAULT
#define CONFIG_POST_EVENTS_FROM_IRAM_ISR CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR
#define CONFIG_POST_EVENTS_FROM_ISR CONFIG_ESP_EVENT_POST_FROM_ISR
#define CONFIG_REDUCE_PHY_TX_POWER CONFIG_ESP32_REDUCE_PHY_TX_POWER
#define CONFIG_SEMIHOSTFS_HOST_PATH_MAX_LEN CONFIG_VFS_SEMIHOSTFS_HOST_PATH_MAX_LEN
#define CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS
#define CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS
#define CONFIG_STACK_CHECK_NONE CONFIG_COMPILER_STACK_CHECK_MODE_NONE
#define CONFIG_SUPPORT_TERMIOS CONFIG_VFS_SUPPORT_TERMIOS
#define CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT
#define CONFIG_SYSTEM_EVENT_QUEUE_SIZE CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE
#define CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE
#define CONFIG_TASK_WDT CONFIG_ESP_TASK_WDT
#define CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0 CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0
#define CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1 CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1
#define CONFIG_TASK_WDT_TIMEOUT_S CONFIG_ESP_TASK_WDT_TIMEOUT_S
#define CONFIG_TCPIP_RECVMBOX_SIZE CONFIG_LWIP_TCPIP_RECVMBOX_SIZE
#define CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY
#define CONFIG_TCPIP_TASK_STACK_SIZE CONFIG_LWIP_TCPIP_TASK_STACK_SIZE
#define CONFIG_TCP_MAXRTX CONFIG_LWIP_TCP_MAXRTX
#define CONFIG_TCP_MSL CONFIG_LWIP_TCP_MSL
#define CONFIG_TCP_MSS CONFIG_LWIP_TCP_MSS
#define CONFIG_TCP_OVERSIZE_MSS CONFIG_LWIP_TCP_OVERSIZE_MSS
#define CONFIG_TCP_QUEUE_OOSEQ CONFIG_LWIP_TCP_QUEUE_OOSEQ
#define CONFIG_TCP_RECVMBOX_SIZE CONFIG_LWIP_TCP_RECVMBOX_SIZE
#define CONFIG_TCP_SND_BUF_DEFAULT CONFIG_LWIP_TCP_SND_BUF_DEFAULT
#define CONFIG_TCP_SYNMAXRTX CONFIG_LWIP_TCP_SYNMAXRTX
#define CONFIG_TCP_WND_DEFAULT CONFIG_LWIP_TCP_WND_DEFAULT
#define CONFIG_TIMER_QUEUE_LENGTH CONFIG_FREERTOS_TIMER_QUEUE_LENGTH
#define CONFIG_TIMER_TASK_PRIORITY CONFIG_FREERTOS_TIMER_TASK_PRIORITY
#define CONFIG_TIMER_TASK_STACK_DEPTH CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH
#define CONFIG_TIMER_TASK_STACK_SIZE CONFIG_ESP_TIMER_TASK_STACK_SIZE
#define CONFIG_TOOLPREFIX CONFIG_SDK_TOOLPREFIX
#define CONFIG_UDP_RECVMBOX_SIZE CONFIG_LWIP_UDP_RECVMBOX_SIZE

  • elf file in the build folder (note this may contain all the code details and symbols of your project.)
  • coredump (This provides stacks of tasks.)
@espressif-bot espressif-bot added the Status: Opened Issue is new label Apr 12, 2021
@github-actions github-actions bot changed the title Calling ESP_LOGI from a critical section of a task function Calling ESP_LOGI from a critical section of a task function (IDFGH-5076) Apr 12, 2021
@igrr
Copy link
Member

igrr commented Apr 13, 2021

@norventa This looks like expected behavior, as blocking operations (such as logging) are not allowed in critical sections. The abort which happens is a few lines below, next to the comment:

/* Tried to block on mutex from ISR, couldn't... rewrite your program to avoid libc interactions in ISRs! */

The comments in the code related to ISRs are incorrect. In this code, xPortCanYield checks whether task switching is allowed, i.e. that a blocking operation can be attempted. ISR context is one of the cases when blocking operations are not allowed, and a critical section (with interrupts disabled) is the other one. We need to fix the comments to mention the case of critical sections as well.

More generally, even if logging without any blocking operations was possible, it wouldn't be recommended. Since logging is slow, interrupts would get delayed for an amount of time up to a few milliseconds, and this can lead to misbehavior of some of the drivers and Wi-Fi/BT stacks. I'd recommend restructuring your code to avoid logging from critical sections.

@norventa
Copy link
Author

Thank you for clarifying that.

@espressif-bot espressif-bot added Resolution: Won't Do This will not be worked on Status: Done Issue is done internally and removed Status: Opened Issue is new labels Apr 14, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Resolution: Won't Do This will not be worked on Status: Done Issue is done internally
Projects
None yet
Development

No branches or pull requests

3 participants