| 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);
 
- }
 
 
  |