【请教】为什么在任务临界区里面使用printf会导致无限重启?

852050675
Posts: 2
Joined: Thu Aug 01, 2024 9:07 am

【请教】为什么在任务临界区里面使用printf会导致无限重启?

Postby 852050675 » Thu Aug 01, 2024 9:17 am

最近在学习ESP32C3开发,在学习创建FreeRTOS任务的时候,拷贝了一份网上例程下来,里面有一段临界区内使用printf输出的代码,烧录现象是板子不停重启,但是只要注释掉进出临界区的代码,程序又能正常运行了,请问这是为什么?代码和ERROR报告贴在了下方🙂

Code: Select all

void task1(void *pvParameters);
void task2(void *pvParameters);
TaskHandle_t Task1Task_Handler;
TaskHandle_t Task2Task_Handler;

void app_main(void)
{


    /*初始化*/
    led_init();
    printf("Hello-ESP32\r\n");


    /* task创建 */
    taskENTER_CRITICAL(0); /* 进入临界区 */
    /* 创建任务 1 */
    xTaskCreate((TaskFunction_t)task1,
                (const char *)"task1",
                (uint32_t)50*1024,
                (void *)NULL,
                (UBaseType_t)2,
                (TaskHandle_t *)&Task1Task_Handler);
    /* 创建任务 2 */
    xTaskCreate((TaskFunction_t)task2,
                (const char *)"task2",
                (uint32_t)50*1024,
                (void *)NULL,
                (UBaseType_t)2,
                (TaskHandle_t *)&Task2Task_Handler);
    //vTaskDelete(StartTask_Handler); /* 删除开始任务 */
    taskEXIT_CRITICAL(0);           /* 退出临界区 */
}

void task1(void *pvParameters)
{
    uint32_t task1_num = 0;

    while (1)
    {
        taskENTER_CRITICAL(0);
        printf("任务 1 运行次数: %lu\r\n", ++task1_num);
        led_right_toggle();
        taskEXIT_CRITICAL(0);
        vTaskDelay(500);
    }
}

void task2(void *pvParameters)
{
    uint32_t task2_num = 0;

    while (1)
    {
        taskENTER_CRITICAL(0);
        printf("任务 2 运行次数 :%lu\r\n", ++task2_num);
        led_left_toggle();
        taskEXIT_CRITICAL(0);
        vTaskDelay(500);
    }
}

【ERROR报告】

Code: Select all

abort() was called at PC 0x40381395 on core 0
0x40381395: lock_acquire_generic at C:/Espressif/frameworks/esp-idf-v5.2.2/components/newlib/locks.c:130

Core  0 register dump:
MEPC    : 0x403806d0  RA      : 0x40383ba6  SP      : 0x3fca9630  GP      : 0x3fc8b800
0x403806d0: panic_abort at C:/Espressif/frameworks/esp-idf-v5.2.2/components/esp_system/panic.c:466
0x40383ba6: __ubsan_include at C:/Espressif/frameworks/esp-idf-v5.2.2/components/esp_system/ubsan.c:313

TP      : 0x3fca0d70  T0      : 0x37363534  T1      : 0x7271706f  T2      : 0x33323130
S0/FP   : 0x00000004  S1      : 0x3fca9694  A0      : 0x3fca965c  A1      : 0x3fca9692
A2      : 0x00000000  A3      : 0x3fca9689  A4      : 0x00000001  A5      : 0x3fc8d000
A6      : 0x7a797877  A7      : 0x76757473  S2      : 0x00000004  S3      : 0xffffffff
S4      : 0x00000000  S5      : 0x00000000  S6      : 0x3fc8d964  S7      : 0x00000000
S8      : 0x00000000  S9      : 0x00000000  S10     : 0x00000000  S11     : 0x00000000
T3      : 0x6e6d6c6b  T4      : 0x6a696867  T5      : 0x66656463  T6      : 0x62613938  
MSTATUS : 0x00001881  MTVEC   : 0x40380001  MCAUSE  : 0x00000007  MTVAL   : 0x00000000
0x40380001: _vector_table at ??:?

MHARTID : 0x00000000

Stack memory:
3fca9630: 0xa5a5a5a5 0xa5a5a5a5 0x3fca9690 0x40389746 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0x3fc8b804
0x40389746: abort at C:/Espressif/frameworks/esp-idf-v5.2.2/components/newlib/abort.c:35

3fca9650: 0x3fca9694 0x3fc8b820 0x3fca9690 0x726f6261 0x20292874 0x20736177 0x6c6c6163 0x61206465
3fca9670: 0x43502074 0x34783020 0x31383330 0x20353933 0x63206e6f 0x2065726f 0x00000030 0xa5a50000
3fca9690: 0xa5a50030 0x38333034 0x35393331 0xa5a5a500 0xa5a5a5a5 0x3fc8daf8 0x3fca96fc 0x40381398
0x40381398: lock_acquire_generic at C:/Espressif/frameworks/esp-idf-v5.2.2/components/newlib/locks.c:135

3fca96b0: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0x00000000
3fca96d0: 0x00000000 0x3c0245ec 0x3fc8daf8 0x403814be 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0x40381594
0x403814be: _lock_acquire_recursive at C:/Espressif/frameworks/esp-idf-v5.2.2/components/newlib/locks.c:159
0x40381594: __retarget_lock_acquire_recursive at C:/Espressif/frameworks/esp-idf-v5.2.2/components/newlib/locks.c:315

3fca96f0: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0x3fc8daf8 0xa5a5a5a5 0xa5a5a5a5 0x3c0245ec 0x4200ddc8
0x4200ddc8: _vfprintf_r at /builds/idf/crosstool-NG/.build/HOST-x86_64-w64-mingw32/riscv32-esp-elf/src/newlib/newlib/libc/stdio/vfprintf.c:851

3fca9710: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0x3fca9c18 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fca9730: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0x00000001 0xa5a5a5a5 0xa5a5a5a5
3fca9750: 0x3c026498 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fca9770: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0x3fca9b54
3fca9790: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fca97b0: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fca97d0: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fca97f0: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fca9810: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fca9830: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fca9850: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fca9870: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fca9890: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fca98b0: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fca98d0: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fca98f0: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fca9910: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fca9930: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fca9950: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fca9970: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fca9990: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fca99b0: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fca99d0: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fca99f0: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fca9a10: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5



ELF file SHA256: f43a63fab

852050675
Posts: 2
Joined: Thu Aug 01, 2024 9:07 am

Re: 【请教】为什么在任务临界区里面使用printf会导致无限重启?

Postby 852050675 » Mon Aug 05, 2024 2:03 am

自顶一下

Who is online

Users browsing this forum: No registered users and 149 guests