使用uart_async_rxtxtasks例程,添加打印后会出现stack overflow

june111
Posts: 1
Joined: Tue Jan 21, 2025 9:57 am

使用uart_async_rxtxtasks例程,添加打印后会出现stack overflow

Postby june111 » Tue Jan 21, 2025 10:19 am

硬件:ESP32-S3-WROOM-1
软件版本:V5.2.3
开发环境:VS Code
修改的代码如下
  1. static void rx_task(void *arg)
  2. {
  3.     static const char *RX_TASK_TAG = "RX_TASK";
  4.     esp_log_level_set(RX_TASK_TAG, ESP_LOG_INFO);
  5.     uint8_t* data = (uint8_t*) malloc(RX_BUF_SIZE + 1);
  6.     //uint32_t userFree = 0;
  7.     volatile int32_t userFree = 0;
  8.     userFree = (int32_t)uxTaskGetStackHighWaterMark(NULL);
  9.     ESP_LOGW(RX_TASK_TAG, "111:%d", 0);
  10.     userFree = (int32_t)uxTaskGetStackHighWaterMark(NULL);
  11.     ESP_LOGI(RX_TASK_TAG, "start is %ld", (int32_t)uxTaskGetStackHighWaterMark(NULL));
  12.     userFree = (int32_t)uxTaskGetStackHighWaterMark(NULL);
  13.  
  14.     while (1) {
  15.         ESP_LOGI(RX_TASK_TAG, "min free stack size is %ld", (int32_t)uxTaskGetStackHighWaterMark(NULL));
  16.         userFree = (int32_t)uxTaskGetStackHighWaterMark(NULL);    
  17.         const int rxBytes = uart_read_bytes(UART_NUM_1, data, RX_BUF_SIZE, 1000 / portTICK_PERIOD_MS);
  18.         if (rxBytes > 0) {
  19.             data[rxBytes] = 0;
  20.             //userFree = uxTaskGetStackHighWaterMark(NULL);
  21.             ESP_LOGI(RX_TASK_TAG, "Read %d bytes: '%s'", rxBytes, data);
  22.             ESP_LOG_BUFFER_HEXDUMP(RX_TASK_TAG, data, rxBytes, ESP_LOG_INFO);
  23.         }
  24.     }
  25.     ESP_LOGW(RX_TASK_TAG, "error:%d", 0);
  26.     free(data);
  27. }
异常日志如下:
  1. I (318) main_task: Calling app_main()
  2. W (35288) RX_TASK: 111:0
  3. I (65258) RX_TASK: start is 68
  4. I (98038) RX_TASK: min free stack size is 68
  5. I (103248) tx_task: min free stack size is 1388
  6. I (103248) TX_TASK: Wrote 11 bytes
  7. I (103248) main: free is 2044
  8. I (103248) main_task: Returned from app_main()
  9. I (104248) RX_TASK: Read 11 bytes: 'Hello world'
  10. I (108858) tx_task: min free stack size is 76
  11. I (114978) TX_TASK: Wrote 11 bytes
  12. I (114978) RX_TASK: 0x3fc9d36c   48 65 6c 6c 6f 20 77 6f  72 6c 64                 |Hello world|
  13. I (123198) tx_task: min free stack size is 76
  14. I (132958) TX_TASK: Wrote 11 bytes
  15. I (133718) RX_TASK: min free stack size is 0
  16.  
  17. ***ERROR*** A stack overflow in task uart_rx_task has been detected.
  18. Setting breakpoint at 0x403759ed and returning...
  19. --- 0x403759ed: panic_abort at D:/Programs/Espressif/frameworks/esp-idf-v5.2.3/components/esp_system/panic.c:466
疑问:
1、ESP_LOGW函数调用之后没有释放栈内存?
调用了一次ESP_LOGW(RX_TASK_TAG, "111:%d", 0);之后,后继查看uxTaskGetStackHighWaterMark(NULL)没有变回原来的大小。
2、是否不应该使用uxTaskGetStackHighWaterMark查看,但没有找到获取当前线程剩余栈空间大小的函数接口

调试过程请查看附件
20250121-181555.jpg
20250121-181555.jpg (258.7 KiB) Viewed 652 times
20250121-181655.jpg
20250121-181655.jpg (232.47 KiB) Viewed 652 times
20250121-181737.jpg
20250121-181737.jpg (283.33 KiB) Viewed 652 times

Who is online

Users browsing this forum: No registered users and 46 guests