diff --git a/components/raop/raop.c b/components/raop/raop.c index ed3170e6..74734dc1 100644 --- a/components/raop/raop.c +++ b/components/raop/raop.c @@ -43,7 +43,7 @@ #include "dmap_parser.h" #include "log_util.h" -#define RTSP_STACK_SIZE (9*1024) +#define RTSP_STACK_SIZE (8*1024) #define SEARCH_STACK_SIZE (2*1048) typedef struct raop_ctx_s { diff --git a/components/services/monitor.c b/components/services/monitor.c index 7d421414..b22d8910 100644 --- a/components/services/monitor.c +++ b/components/services/monitor.c @@ -40,6 +40,53 @@ bool jack_inserted_svc(void); void (*spkfault_handler_svc)(bool inserted); bool spkfault_svc(void); +/**************************************************************************************** + * + */ +static void task_stats( void ) { + static struct { + TaskStatus_t *tasks; + uint32_t total, n; + } current, previous; + + current.n = uxTaskGetNumberOfTasks(); + current.tasks = malloc( current.n * sizeof( TaskStatus_t ) ); + current.n = uxTaskGetSystemState( current.tasks, current.n, ¤t.total ); + + static EXT_RAM_ATTR char scratch[128+1]; + *scratch = '\0'; + +#ifdef CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS + uint32_t elapsed = current.total - previous.total; + + for(int i = 0, n = 0; i < current.n; i++ ) { + for (int j = 0; j < previous.n; j++) { + if (current.tasks[i].xTaskNumber == previous.tasks[j].xTaskNumber) { + n += sprintf(scratch + n, "%16s %2u%% s:%5u)", current.tasks[i].pcTaskName, + 100 * (current.tasks[i].ulRunTimeCounter - previous.tasks[j].ulRunTimeCounter) / elapsed, + current.tasks[i].usStackHighWaterMark); + if (i % 3 == 2 || i == current.n - 1) { + ESP_LOGI(TAG, "%s", scratch); + n = 0; + } + break; + } + } + } +#else + for (int i = 0, n = 0; i < current.n; i ++) { + n += sprintf(scratch + n, "%16s s:%5u\t", current.tasks[i].pcTaskName, current.tasks[i].usStackHighWaterMark); + if (i % 3 == 2 || i == current.n - 1) { + ESP_LOGI(TAG, "%s", scratch); + n = 0; + } + } +#endif + + if (previous.tasks) free(previous.tasks); + previous = current; +} + /**************************************************************************************** * */ @@ -49,6 +96,8 @@ static void monitor_callback(TimerHandle_t xTimer) { 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)); + + task_stats(); } /**************************************************************************************** diff --git a/components/squeezelite/display.c b/components/squeezelite/display.c index 3e7d1b42..4fc0cf40 100644 --- a/components/squeezelite/display.c +++ b/components/squeezelite/display.c @@ -728,10 +728,9 @@ static void visu_update(void) { */ void spectrum_limits(int min, int n, int pos) { if (n / 2) { - int i; - float step = (DISPLAY_BW - min) * visu.spectrum_scale / (n/2); + int step = ((DISPLAY_BW - min) * visu.spectrum_scale * 2) / n; visu.bars[pos].limit = min + step; - for (i = 1; i < n/2; i++) visu.bars[pos+i].limit = visu.bars[pos+i-1].limit + step; + for (int i = 1; i < n/2; i++) visu.bars[pos+i].limit = visu.bars[pos+i-1].limit + step; spectrum_limits(visu.bars[pos + n/2 - 1].limit, n/2, pos + n/2); } else { visu.bars[pos].limit = DISPLAY_BW; diff --git a/components/wifi-manager/http_server.c b/components/wifi-manager/http_server.c index 44d233a7..a5f8df2a 100644 --- a/components/wifi-manager/http_server.c +++ b/components/wifi-manager/http_server.c @@ -336,7 +336,7 @@ void http_server_netconn_serve(struct netconn *conn) { netbuf_data(inbuf, (void**)&rcvbuf, &rcvlen); dump_net_buffer(rcvbuf, rcvlen); if (buflen + rcvlen > bufsize) { - bufsize += 2048; + bufsize += rcvlen - bufsize < 2048 ? 2048 : rcvlen - bufsize; buf = realloc(buf, bufsize); } memcpy(buf + buflen, rcvbuf, rcvlen);