mirror of
https://github.com/espressif/ESP8266_RTOS_SDK.git
synced 2025-06-21 23:00:39 +08:00
Merge branch 'bugfix/fix_heap_trace_error' into 'master'
Fix heap trace check error See merge request sdk/ESP8266_RTOS_SDK!549
This commit is contained in:
@ -35,9 +35,6 @@ extern "C" {
|
||||
#define MALLOC_CAP_8BIT (1 << 2) ///< Memory must allow for 8-bit data accesses
|
||||
#define MALLOC_CAP_DMA (1 << 3) ///< Memory must be able to accessed by DMA
|
||||
|
||||
#define MEM_BLK_TAG 0x80000000 ///< Mark the memory block used
|
||||
#define MEM_BLK_TRACE 0x80000000 ///< Mark the memory block traced
|
||||
|
||||
#define MEM_HEAD_SIZE sizeof(mem_blk_t) ///< Size of first type memory block
|
||||
#define MEM2_HEAD_SIZE sizeof(mem2_blk_t) ///< Size of second type memory block
|
||||
|
||||
|
@ -20,6 +20,9 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define MEM_BLK_TAG 0x80000000 ///< Mark the memory block used
|
||||
#define MEM_BLK_TRACE 0x80000000 ///< Mark the memory block traced
|
||||
|
||||
#define _mem_blk_get_ptr(_mem_blk, _offset, _mask) \
|
||||
((mem_blk_t *)((((uint32_t *)(_mem_blk))[_offset]) & (~_mask)))
|
||||
|
||||
@ -49,7 +52,7 @@ static inline void mem_blk_set_traced(mem2_blk_t *mem_blk, const char *file, siz
|
||||
*val |= MEM_BLK_TRACE;
|
||||
|
||||
mem_blk->file = file;
|
||||
mem_blk->line = line;
|
||||
mem_blk->line = line | MEM_BLK_TRACE;
|
||||
}
|
||||
|
||||
static inline void mem_blk_set_untraced(mem2_blk_t *mem_blk)
|
||||
@ -123,7 +126,7 @@ static inline bool ptr_is_traced(void *ptr)
|
||||
{
|
||||
uint32_t *p = (uint32_t *)ptr - 1;
|
||||
|
||||
return p[0] & 0xf0000000 ? false : true;
|
||||
return p[0] & MEM_BLK_TRACE ? true : false;
|
||||
}
|
||||
|
||||
static inline mem_blk_t *ptr2blk(void *ptr, bool trace)
|
||||
@ -149,6 +152,11 @@ static inline size_t ptr_size(void *ptr)
|
||||
return size;
|
||||
}
|
||||
|
||||
static inline size_t mem2_blk_line(mem2_blk_t *mem2_blk)
|
||||
{
|
||||
return mem2_blk->line & ~MEM_BLK_TRACE;
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
@ -108,18 +108,19 @@ void heap_trace_dump(void)
|
||||
|
||||
_heap_caps_lock(num);
|
||||
|
||||
ESP_EARLY_LOGI(TAG, "\r\n\r\n");
|
||||
ESP_EARLY_LOGD(TAG, "start %p end %p", mem_start, mem_end);
|
||||
ESP_EARLY_LOGD(TAG, "free blk %p", g_heap_region[num].free_blk);
|
||||
ESP_EARLY_LOGD(TAG, "size %d mini size %d", g_heap_region[num].free_bytes, g_heap_region[num].min_free_bytes);
|
||||
ESP_LOGI(TAG, "\r\n\r\n");
|
||||
ESP_LOGD(TAG, "start %p end %p", mem_start, mem_end);
|
||||
ESP_LOGD(TAG, "free blk %p", g_heap_region[num].free_blk);
|
||||
ESP_LOGD(TAG, "size %d mini size %d", g_heap_region[num].free_bytes, g_heap_region[num].min_free_bytes);
|
||||
|
||||
p = mem_start;
|
||||
while (p != mem_end) {
|
||||
if (mem_blk_is_used(p) && mem_blk_is_traced(p)) {
|
||||
mem2_blk_t *mem2_blk = (mem2_blk_t *)p;
|
||||
size_t line = mem2_blk_line(mem2_blk);
|
||||
|
||||
if (!mem2_blk->line) {
|
||||
ESP_EARLY_LOGI(TAG, HEAP_INFO " caller func %p", HEAP_INFO_PARAM(p), mem2_blk->file);
|
||||
if (!line) {
|
||||
ESP_LOGI(TAG, HEAP_INFO " caller func %p", HEAP_INFO_PARAM(p), mem2_blk->file);
|
||||
} else {
|
||||
const char *file = rindex(mem2_blk->file, '/');
|
||||
if (file)
|
||||
@ -127,7 +128,7 @@ void heap_trace_dump(void)
|
||||
else
|
||||
file = mem2_blk->file;
|
||||
|
||||
ESP_EARLY_LOGI(TAG, HEAP_INFO " caller file %s line %d", HEAP_INFO_PARAM(p), file, mem2_blk->line);
|
||||
ESP_LOGI(TAG, HEAP_INFO " caller file %s line %d", HEAP_INFO_PARAM(p), file, line);
|
||||
}
|
||||
}
|
||||
#ifdef CONFIG_TRACE_ALL
|
||||
|
Reference in New Issue
Block a user