void IBN_ListTaskWithinSingleList (xList *pxList, char *pcStatus )
{
	volatile tskTCB *pxNextTCB, *pxFirstTCB;
	u16 usStackRemaining;

	u64 ullTotalRunTime = portGET_RUN_TIME_COUNTER_VALUE();
	u64 ullStatsAsPercentage;

	/* Write the details of all the TCB's in pxList into the buffer. */
	listGET_OWNER_OF_NEXT_ENTRY( pxFirstTCB, pxList );
	do
	{
		listGET_OWNER_OF_NEXT_ENTRY( pxNextTCB, pxList );

		usStackRemaining = usTaskCheckFreeStackSpace( ( unsigned char * ) pxNextTCB->pxStack );
		ullStatsAsPercentage = (u64)0;
		if ((u64)0 != ullTotalRunTime)
		{
			ullStatsAsPercentage  =  (u64)10000 * (u64)(pxNextTCB->ullRunTimeCounter);
			ullStatsAsPercentage /=  ullTotalRunTime;
		}

		CI_LocalPrintf("%-21.21s ", pxNextTCB->pcTaskName);
		CI_LocalPrintf("%s   ", pcStatus);
		CI_LocalPrintf("%u  ", ( unsigned int ) pxNextTCB->uxPriority);
		CI_LocalPrintf("%5u ", usStackRemaining);
		CI_LocalPrintf("%10u ", (u32)(pxNextTCB->ullRunTimeCounter / 60ULL));
		CI_LocalPrintf("%s ", TIME_MEASURING_ShortText (pxNextTCB->ullRunTimeCounter / 60ULL));

		CI_LocalPrintf("%6.2f %% ",(float)ullStatsAsPercentage/100.0);
		CI_LocalPrintf("%7u \r\n", pxNextTCB->ulRunCounter);

//		CI_LocalPrintf( ( char * ) "%-21.21s %s   %u  %5u %9u %6.2f %%\r\n", pxNextTCB->pcTaskName, pcStatus, ( unsigned int ) pxNextTCB->uxPriority, usStackRemaining,pxNextTCB->ullRunTimeCounter/60,(float)ullStatsAsPercentage/100.0);
	} while( pxNextTCB != pxFirstTCB );
}
Example #2
0
/**
 * Initialize library
 */
int32_t TaskMonitorInitialize(void)
{
	lock = xSemaphoreCreateRecursiveMutex();
	memset(handles, 0, sizeof(xTaskHandle)*TASKINFO_RUNNING_NUMELEM);
	lastMonitorTime = portGET_RUN_TIME_COUNTER_VALUE();
	return 0;
}
void IBN_Taskdata (u8 i)
{
	u64 ullTotalRunTime = portGET_RUN_TIME_COUNTER_VALUE();
  u64 ullStatsAsPercentage;
	u16 usStackRemaining;

	usStackRemaining = usTaskCheckFreeStackSpace( ( unsigned char * ) IBN_Tasklist_st[i]->pxStack ) * sizeof (portSTACK_TYPE);
	ullStatsAsPercentage       = (u64)0;

	if ((u64)0 != ullTotalRunTime)
	{
		ullStatsAsPercentage  =  (u64)10000 * (u64)(IBN_Tasklist_st[i]->ullRunTimeCounter);
		ullStatsAsPercentage /=  ullTotalRunTime;

	}

	CI_LocalPrintf( ( char * ) "%-21.21s ", IBN_Tasklist_st[i]->pcTaskName);
	CI_LocalPrintf( ( char * ) "%s   ", IBN_TaskStates[IBN_TasklistState_u8[i]]);
	CI_LocalPrintf( ( char * ) "%u  ", ( unsigned int ) IBN_Tasklist_st[i]->uxPriority);
	CI_LocalPrintf( ( char * ) "%5u ", usStackRemaining);
//	CI_LocalPrintf( ( char * ) "%10u ", (u32)(IBN_Tasklist_st[i]->ullRunTimeCounter / 60ULL));
	CI_LocalPrintf("%s ", TIME_MEASURING_ShortText (IBN_Tasklist_st[i]->ullRunTimeCounter / 60ULL));

  CI_LocalPrintf( ( char * ) "%6.2f %% ",(float)ullStatsAsPercentage/100.0);
  CI_LocalPrintf( ( char * ) "%6.2f %% ",(float)IBN_Tasklist_st[i]->ullRunTimeCounterLastMinute/(10000.0*60.0*60.0)*(float)(configTICK_RATE_HZ)/1000.0);
	CI_LocalPrintf( ( char * ) "%8u \r\n", IBN_Tasklist_st[i]->ulRunCounter);
}
Example #4
0
/**
 * Update the status of all tasks
 */
void TaskMonitorUpdateAll(void)
{
#if defined(DIAGNOSTICS)
	TaskInfoData data;
	int n;

	// Lock
	xSemaphoreTakeRecursive(lock, portMAX_DELAY);

#if ( configGENERATE_RUN_TIME_STATS == 1 )
	uint32_t currentTime;
	uint32_t deltaTime;
	
	/*
	 * Calculate the amount of elapsed run time between the last time we
	 * measured and now. Scale so that we can convert task run times
	 * directly to percentages.
	 */
	currentTime = portGET_RUN_TIME_COUNTER_VALUE();
	deltaTime = ((currentTime - lastMonitorTime) / 100) ? : 1; /* avoid divide-by-zero if the interval is too small */
	lastMonitorTime = currentTime;			
#endif
	
	// Update all task information
	for (n = 0; n < TASKINFO_RUNNING_NUMELEM; ++n)
	{
		if (handles[n] != 0)
		{
			data.Running[n] = TASKINFO_RUNNING_TRUE;
#if defined(ARCH_POSIX) || defined(ARCH_WIN32)
			data.StackRemaining[n] = 10000;
#else
			data.StackRemaining[n] = uxTaskGetStackHighWaterMark(handles[n]) * 4;
#if ( configGENERATE_RUN_TIME_STATS == 1 )
			/* Generate run time stats */
			data.RunningTime[n] = uxTaskGetRunTime(handles[n]) / deltaTime;
			
#endif
#endif
			
		}
		else
		{
			data.Running[n] = TASKINFO_RUNNING_FALSE;
			data.StackRemaining[n] = 0;
			data.RunningTime[n] = 0;
		}
	}

	// Update object
	TaskInfoSet(&data);

	// Done
	xSemaphoreGiveRecursive(lock);
#endif
}
Example #5
0
/**
 * Update the status of all tasks
 */
void TaskMonitorUpdateAll(void)
{
#if defined(DIAG_TASKS)
	TaskInfoData data;
	int n;

	// Lock
	PIOS_Mutex_Lock(lock, PIOS_MUTEX_TIMEOUT_MAX);

	uint32_t currentTime;
	uint32_t deltaTime;
	
	/*
	 * Calculate the amount of elapsed run time between the last time we
	 * measured and now. Scale so that we can convert task run times
	 * directly to percentages.
	 */
#if defined(PIOS_INCLUDE_FREERTOS)
	currentTime = portGET_RUN_TIME_COUNTER_VALUE();
#elif defined(PIOS_INCLUDE_CHIBIOS)
	currentTime = hal_lld_get_counter_value();
#endif /* defined(PIOS_INCLUDE_CHIBIOS) */
	deltaTime = ((currentTime - lastMonitorTime) / 100) ? : 1; /* avoid divide-by-zero if the interval is too small */
	lastMonitorTime = currentTime;
	
	// Update all task information
	for (n = 0; n < TASKINFO_RUNNING_NUMELEM; ++n)
	{
		if (handles[n] != 0)
		{
			data.Running[n] = TASKINFO_RUNNING_TRUE;
			data.StackRemaining[n] = PIOS_Thread_Get_Stack_Usage(handles[n]);
			/* Generate run time stats */
			data.RunningTime[n] = PIOS_Thread_Get_Runtime(handles[n]) / deltaTime;
		}
		else
		{
			data.Running[n] = TASKINFO_RUNNING_FALSE;
			data.StackRemaining[n] = 0;
			data.RunningTime[n] = 0;
		}
	}

	// Update object
	TaskInfoSet(&data);

	// Done
	PIOS_Mutex_Unlock(lock);
#endif
}
Example #6
0
/**
 * Initialize library
 */
int32_t TaskMonitorInitialize(void)
{
	lock = PIOS_Mutex_Create();
	PIOS_Assert(lock != NULL);
	memset(handles, 0, sizeof(struct pios_thread) * TASKINFO_RUNNING_NUMELEM);
	lastMonitorTime = 0;
#if defined(DIAG_TASKS)
#if defined(PIOS_INCLUDE_FREERTOS)
	lastMonitorTime = portGET_RUN_TIME_COUNTER_VALUE();
#elif defined(PIOS_INCLUDE_CHIBIOS)
	lastMonitorTime = halGetCounterValue();
#endif /* defined(PIOS_INCLUDE_CHIBIOS) */
#endif
	return 0;
}
Example #7
0
/**
 * Update the status of all tasks
 */
void TaskMonitorUpdateAll(void)
{
	TaskInfoData data;
	int n;

	// Lock
	xSemaphoreTakeRecursive(lock, portMAX_DELAY);

	// Update all task information
	for (n = 0; n < TASKINFO_RUNNING_NUMELEM; ++n)
	{
		if (handles[n] != 0)
		{
			data.Running[n] = TASKINFO_RUNNING_TRUE;
#if defined(ARCH_POSIX) || defined(ARCH_WIN32)
			data.StackRemaining[n] = 10000;
#else
			data.StackRemaining[n] = uxTaskGetStackHighWaterMark(handles[n]) * 4;
#if ( configGENERATE_RUN_TIME_STATS == 1 )
			/* Generate run time stats */
			data.RunningTime[n] = 100 * (float) uxTaskGetRunTime(handles[n]) / portGET_RUN_TIME_COUNTER_VALUE();
#endif
#endif
			
		}
		else
		{
			data.Running[n] = TASKINFO_RUNNING_FALSE;
			data.StackRemaining[n] = 0;
			data.RunningTime[n] = 0;
		}
	}

	// Update object
	TaskInfoSet(&data);

	// Done
	xSemaphoreGiveRecursive(lock);
}