From 88ab5d4830e2eeb24fbae1d5f7d66a2e33bdbde0 Mon Sep 17 00:00:00 2001 From: Stephen Casner Date: Sun, 22 Oct 2017 00:25:10 -0700 Subject: [PATCH] Return region tag in mem_debug_malloc_dump() Also in mem_init_dog() avoid making a byte access to the task name in the debug block because that fails for the IRAM heap region. --- components/freertos/heap_regions_debug.c | 6 ++++-- components/freertos/include/freertos/heap_regions_debug.h | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/components/freertos/heap_regions_debug.c b/components/freertos/heap_regions_debug.c index 5cb8f5f9c..21011d581 100644 --- a/components/freertos/heap_regions_debug.c +++ b/components/freertos/heap_regions_debug.c @@ -86,6 +86,7 @@ size_t mem_debug_malloc_dump(int task, mem_dump_block_t* buffer, size_t size) *(int*)buffer->task = btask; buffer->address = (void*)b; buffer->size = b->size; + buffer->xtag = b->xtag; ++buffer; --remaining; b = b->next; @@ -132,8 +133,9 @@ void mem_init_dog(void *data) #if (INCLUDE_pcTaskGetTaskName == 1) task = xTaskGetCurrentTaskHandle(); if (task){ - strncpy(b->head.task, pcTaskGetTaskName(task), 3); - b->head.task[3] = '\0'; + int name = 0; + strncpy((char*)&name, pcTaskGetTaskName(task), 3); + *(int*)b->head.task = name; } else { *(int*)b->head.task = 0; diff --git a/components/freertos/include/freertos/heap_regions_debug.h b/components/freertos/include/freertos/heap_regions_debug.h index 064beeadd..5a1a220d3 100644 --- a/components/freertos/include/freertos/heap_regions_debug.h +++ b/components/freertos/include/freertos/heap_regions_debug.h @@ -78,7 +78,9 @@ extern void mem_malloc_set_abort(int task, int size, int count); typedef struct { char task[4]; void* address; - int size; + int size: 24; /*<< The size of the free block. */ + int xtag: 7; /*<< Tag of this region */ + int xAllocated: 1; /*<< 1 if allocated */ } mem_dump_block_t; extern size_t mem_debug_malloc_dump(int task, mem_dump_block_t* buffer, size_t size);