/* The example of esp-free-rtos
*
* This sample code is in the public domain.
*/
#include <stdlib.h>
#include "espressif/esp_common.h"
#include "esp/uart.h"
#include "FreeRTOS.h"
#include "task.h"
void user_init(void)
{
uart_set_baud(0, 115200);
printf("SDK version:%s\n",
sdk_system_get_sdk_version());
printf("pcTaskGetName=%s\n",pcTaskGetName(0));
printf("uxTaskPriorityGet=%d\n",(int)uxTaskPriorityGet(0));
sdk_wifi_set_opmode(NULL_MODE);
TaskStatus_t *pxTaskStatusArray;
volatile UBaseType_t uxArraySize, x;
//unsigned long ulTotalRunTime,
ulStatsAsPercentage;
uint32_t ulTotalRunTime,
ulStatsAsPercentage;
/* Take a snapshot of the number of
tasks in case it changes while this
function is executing. */
uxArraySize = uxTaskGetNumberOfTasks();
//uxArraySize =
uxCurrentNumberOfTasks();
printf("uxArraySize=%d\n",(int)uxArraySize);
/* Allocate a TaskStatus_t structure
for each task. An array could be
allocated statically at compile time.
*/
pxTaskStatusArray = pvPortMalloc(
uxArraySize * sizeof( TaskStatus_t ) );
//printf("pxTaskStatusArray=%x\n",(int)pxTaskStatusArray);
if( pxTaskStatusArray != NULL )
{
/* Generate raw
status information about each task. */
uxArraySize =
uxTaskGetSystemState( pxTaskStatusArray,
uxArraySize,
&ulTotalRunTime );
/* For percentage
calculations. */
printf("ulTotalRunTime=%d\n",(int)ulTotalRunTime);
ulTotalRunTime /=
100UL;
/* For each populated
position in the pxTaskStatusArray array,
format the raw data
as human readable ASCII data. */
for( x = 0; x <
uxArraySize; x++ ) {
/* What
percentage of the total run time has the task used?
This will
always be rounded down to the nearest integer.
ulTotalRunTimeDiv100 has already been divided by 100. */
ulStatsAsPercentage = 0;
if (
ulTotalRunTime > 0)
ulStatsAsPercentage =
pxTaskStatusArray[ x ].ulRunTimeCounter / ulTotalRunTime;
UBaseType_t HighWaterMark =
uxTaskGetStackHighWaterMark ( pxTaskStatusArray[ x
].xHandle );
if(
ulStatsAsPercentage > 0UL ) {
printf( "%-20s\t%d\t%lu\t%lu\t%lu\t%lu\t%lu%%\r\n",
pxTaskStatusArray[ x ].pcTaskName,
pxTaskStatusArray[ x ].eCurrentState,
(unsigned long)pxTaskStatusArray[ x ].xTaskNumber,
(unsigned long)pxTaskStatusArray[ x ].uxCurrentPriority,
(unsigned long)HighWaterMark,
(unsigned long)pxTaskStatusArray[ x ].ulRunTimeCounter,
(unsigned long)ulStatsAsPercentage );
} else {
/* If the percentage is zero here then the task has
consumed less than 1% of the total run time. */
printf("%-20s\t%d\t%lu\t%lu\t%lu\t%lu\t<1%%\r\n",
pxTaskStatusArray[ x ].pcTaskName,
pxTaskStatusArray[ x ].eCurrentState,
(unsigned long)pxTaskStatusArray[ x ].xTaskNumber,
(unsigned long)pxTaskStatusArray[ x ].uxCurrentPriority,
(unsigned long)HighWaterMark,
(unsigned long)pxTaskStatusArray[ x ].ulRunTimeCounter );
}
} // end for
/* The array is no
longer needed, free the memory it consumes. */
vPortFree(
pxTaskStatusArray );
}
} |