123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- #include <stdint.h>
- #include "esp_system.h"
- #include <string.h>
- #include <stdbool.h>
- #include "esp_log.h"
- #include "freertos/xtensa_api.h"
- #include "freertos/FreeRTOSConfig.h"
- #include "freertos/FreeRTOS.h"
- #include "freertos/queue.h"
- #include "freertos/task.h"
- #include "esp_event.h"
- #include "tools.h"
- #include "trace.h"
- static const char TAG[] = "TRACE";
- // typedef struct mem_usage_trace_for_thread {
- // TaskHandle_t task;
- // size_t malloc_int_last;
- // size_t malloc_spiram_last;
- // size_t malloc_dma_last;
- // const char *name;
- // SLIST_ENTRY(mem_usage_trace_for_thread) next;
- // } mem_usage_trace_for_thread_t;
- // static EXT_RAM_ATTR SLIST_HEAD(memtrace, mem_usage_trace_for_thread) s_memtrace;
- // mem_usage_trace_for_thread_t* memtrace_get_thread_entry(TaskHandle_t task) {
- // if(!task) {
- // ESP_LOGE(TAG, "memtrace_get_thread_entry: task is NULL");
- // return NULL;
- // }
- // ESP_LOGD(TAG,"Looking for task %s",STR_OR_ALT(pcTaskGetName(task ), "unknown"));
- // mem_usage_trace_for_thread_t* it;
- // SLIST_FOREACH(it, &s_memtrace, next) {
- // if ( it->task == task ) {
- // ESP_LOGD(TAG,"Found task %s",STR_OR_ALT(pcTaskGetName(task ), "unknown"));
- // return it;
- // }
- // }
- // return NULL;
- // }
- // void memtrace_add_thread_entry(TaskHandle_t task) {
- // if(!task) {
- // ESP_LOGE(TAG, "memtrace_get_thread_entry: task is NULL");
- // return ;
- // }
- // mem_usage_trace_for_thread_t* it = memtrace_get_thread_entry(task);
- // if (it) {
- // ESP_LOGW(TAG, "memtrace_add_thread_entry: thread already in list");
- // return;
- // }
- // it = (mem_usage_trace_for_thread_t*)malloc_init_external(sizeof(mem_usage_trace_for_thread_t));
- // if (!it) {
- // ESP_LOGE(TAG, "memtrace_add_thread_entry: malloc failed");
- // return;
- // }
- // it->task = task;
- // it->malloc_int_last = heap_caps_get_free_size(MALLOC_CAP_INTERNAL);
- // it->malloc_spiram_last = heap_caps_get_free_size(MALLOC_CAP_SPIRAM);
- // it->malloc_dma_last = heap_caps_get_free_size(MALLOC_CAP_DMA);
- // it->name = pcTaskGetName(task);
- // SLIST_INSERT_HEAD(&s_memtrace, it, next);
- // return;
- // }
- // void memtrace_print_delta(){
- // TaskHandle_t task = xTaskGetCurrentTaskHandle();
- // mem_usage_trace_for_thread_t* it = memtrace_get_thread_entry(task);
- // if (!it) {
- // memtrace_add_thread_entry(task);
- // ESP_LOGW(TAG, "memtrace_print_delta: added new entry for task %s",STR_OR_ALT(pcTaskGetName(task ), "unknown"));
- // return;
- // }
- // size_t malloc_int_delta = heap_caps_get_free_size(MALLOC_CAP_INTERNAL) - it->malloc_int_last;
- // size_t malloc_spiram_delta = heap_caps_get_free_size(MALLOC_CAP_SPIRAM) - it->malloc_spiram_last;
- // size_t malloc_dma_delta = heap_caps_get_free_size(MALLOC_CAP_DMA) - it->malloc_dma_last;
- // ESP_LOG(TAG, "Heap internal:%zu (min:%zu) external:%zu (min:%zu) dma:%zu (min:%zu)",
- // heap_caps_get_free_size(MALLOC_CAP_INTERNAL),
- // heap_caps_get_minimum_free_size(MALLOC_CAP_INTERNAL),
- // heap_caps_get_free_size(MALLOC_CAP_SPIRAM),
- // heap_caps_get_minimum_free_size(MALLOC_CAP_SPIRAM),
- // heap_caps_get_free_size(MALLOC_CAP_DMA),
- // heap_caps_get_minimum_free_size(MALLOC_CAP_DMA));
- // ESP_LOGW(TAG, "memtrace_print_delta: %s: malloc_int_delta=%d, malloc_spiram_delta=%d, malloc_dma_delta=%d",
- // STR_OR_ALT(it->name, "unknown"),
- // malloc_int_delta,
- // malloc_spiram_delta,
- // malloc_dma_delta);
- // it->malloc_int_last = heap_caps_get_free_size(MALLOC_CAP_INTERNAL);
- // it->malloc_spiram_last = heap_caps_get_free_size(MALLOC_CAP_SPIRAM);
- // it->malloc_dma_last = heap_caps_get_free_size(MALLOC_CAP_DMA);
-
- // }
- size_t malloc_int = 0;
- size_t malloc_spiram =0;
- size_t malloc_dma = 0;
- void memtrace_print_delta(const char * msg, const char * tag, const char * function){
- size_t malloc_int_delta = heap_caps_get_free_size(MALLOC_CAP_INTERNAL) - malloc_int;
- size_t malloc_spiram_delta = heap_caps_get_free_size(MALLOC_CAP_SPIRAM) - malloc_spiram;
- size_t malloc_dma_delta = heap_caps_get_free_size(MALLOC_CAP_DMA) - malloc_dma;
- ESP_LOGW(TAG, "Heap internal:%zu (min:%zu)(chg:%d)/external:%zu (min:%zu)(chg:%d)/dma:%zu (min:%zu)(chg:%d) : %s%s%s%s%s",
- heap_caps_get_free_size(MALLOC_CAP_INTERNAL),
- heap_caps_get_minimum_free_size(MALLOC_CAP_INTERNAL),
- malloc_int_delta,
- heap_caps_get_free_size(MALLOC_CAP_SPIRAM),
- heap_caps_get_minimum_free_size(MALLOC_CAP_SPIRAM),
- malloc_spiram_delta,
- heap_caps_get_free_size(MALLOC_CAP_DMA),
- heap_caps_get_minimum_free_size(MALLOC_CAP_DMA),
- malloc_dma_delta,
- STR_OR_BLANK(tag),
- tag?" ":"",
- STR_OR_BLANK(function),
- function?" ":"",
- STR_OR_BLANK(msg)
- );
- malloc_int = heap_caps_get_free_size(MALLOC_CAP_INTERNAL);
- malloc_spiram = heap_caps_get_free_size(MALLOC_CAP_SPIRAM);
- malloc_dma = heap_caps_get_free_size(MALLOC_CAP_DMA);
- }
|