Open2

ESP32 debug memo

zakkiezakkie

よくわからないところで落ちる:Stack サイズの不足を疑ってみる

FreeRTOS では task 毎に stack サイズが決まる。
main task の最大 stack サイズは以下で得られる。

UBaseType_t wm = uxTaskGetStackHighWaterMark(NULL);
printf("stack: %" PRIu32 "\n", wm);
zakkiezakkie

ヒープメモリの統計は heap_caps_print_heap_info(MALLOC_CAP_DEFAULT) で見る。

引数で参照するヒープ領域を切り替えることができる。
一覧:
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/mem_alloc.html#macros

出力例:

Heap summary for capabilities 0x00001000:
  At 0x3f800000 len 4194303 free 4194264 allocated 0 min_free 4194264
    largest_free_block 4194264 alloc_blocks 0 free_blocks 1 total_blocks 1
  At 0x3ffae6e0 len 6432 free 8 allocated 6284 min_free 0
    largest_free_block 8 alloc_blocks 26 free_blocks 1 total_blocks 27
  At 0x3ffb59f0 len 173584 free 106132 allocated 67244 min_free 105712
    largest_free_block 106020 alloc_blocks 40 free_blocks 4 total_blocks 44
  At 0x3ffe0440 len 15072 free 15036 allocated 0 min_free 15036
    largest_free_block 15036 alloc_blocks 0 free_blocks 1 total_blocks 1
  At 0x3ffe4350 len 113840 free 113804 allocated 0 min_free 113804
    largest_free_block 113804 alloc_blocks 0 free_blocks 1 total_blocks 1
  Totals:
    free 4429244 allocated 73528 min_free 4428816 largest_free_block 4194264