【请教】为什么在任务临界区里面使用printf会导致无限重启?
Posted: Thu Aug 01, 2024 9:17 am
最近在学习ESP32C3开发,在学习创建FreeRTOS任务的时候,拷贝了一份网上例程下来,里面有一段临界区内使用printf输出的代码,烧录现象是板子不停重启,但是只要注释掉进出临界区的代码,程序又能正常运行了,请问这是为什么?代码和ERROR报告贴在了下方
【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