示例#1
0
/*******************************************************************************
 * CheckRecorderStatus
 *
 * Called by TzCtrl task periodically (every 100 ms - seems reasonable).
 * Checks a number of diagnostic variables and give warnings as user events,
 * in most cases including a suggested solution.
 ******************************************************************************/
static void CheckRecorderStatus(void)
{
	if (NoRoomForSymbol > NoRoomForSymbol_last)
	{
		vTracePrintF(trcWarningChannel, "TRC_SYMBOL_TABLE_SLOTS too small. Add %d slots.",
			NoRoomForSymbol);

		NoRoomForSymbol_last = NoRoomForSymbol;
	}

	if (NoRoomForObjectData > NoRoomForObjectData_last)
	{
		vTracePrintF(trcWarningChannel, "TRC_OBJECT_DATA_SLOTS too small. Add %d slots.",
			NoRoomForObjectData);

		NoRoomForObjectData_last = NoRoomForObjectData;
	}

	if (LongestSymbolName > LongestSymbolName_last)
	{
		if (LongestSymbolName > TRC_SYMBOL_MAX_LENGTH)
		{
			vTracePrintF(trcWarningChannel, "TRC_SYMBOL_MAX_LENGTH too small. Add %d chars.",
				LongestSymbolName);
		}
		LongestSymbolName_last = LongestSymbolName;
	}

	if (MaxBytesTruncated > MaxBytesTruncated_last)
	{
		/* Some string event generated a too long string that was truncated.
		This may happen for the following functions:
		- vTracePrintF
		- vTracePrintF
		- vTraceStoreKernelObjectName
		- vTraceStoreUserEventChannelName
		- vTraceSetISRProperties

		A PSF event may store maximum 60 bytes payload, including data arguments
		and string characters. For User Events, also the User Event Channel ptr
		must be squeezed in, if a channel is specified. */

		vTracePrintF(trcWarningChannel, "String event too long, up to %d bytes truncated.",
			MaxBytesTruncated);

		MaxBytesTruncated_last = MaxBytesTruncated;
	}

#if ((TRC_STREAM_PORT_BLOCKING_TRANSFER==1) && (TRC_MEASURE_BLOCKING_TIME))
	if (blockingCount > 0)
	{
		/* At least one case of blocking since the last check and this is
		the longest case. */
		vTracePrintF(trcDiagnosticsChannel, "Longest since last: %d us",
			(uint32_t)blockingCyclesMax/(TRACE_CPU_CLOCK_HZ/1000000));

		blockingCyclesMax = 0;
	}
#endif
}
示例#2
0
/*******************************************************************************
 * prvCheckRecorderStatus
 *
 * Called by TzCtrl task periodically (every 100 ms - seems reasonable).
 * Checks a number of diagnostic variables and give warnings as user events,
 * in most cases including a suggested solution.
 ******************************************************************************/
static void prvCheckRecorderStatus(void)
{
	if (NoRoomForSymbol > NoRoomForSymbol_last)
	{
		vTracePrintF(trcWarningChannel, "TRC_CFG_SYMBOL_TABLE_SLOTS too small. Add %d slots.",
			NoRoomForSymbol);

		NoRoomForSymbol_last = NoRoomForSymbol;
	}

	if (NoRoomForObjectData > NoRoomForObjectData_last)
	{
		vTracePrintF(trcWarningChannel, "TRC_CFG_OBJECT_DATA_SLOTS too small. Add %d slots.",
			NoRoomForObjectData);

		NoRoomForObjectData_last = NoRoomForObjectData;
	}

	if (LongestSymbolName > LongestSymbolName_last)
	{
		if (LongestSymbolName > TRC_CFG_SYMBOL_MAX_LENGTH)
		{
			vTracePrintF(trcWarningChannel, "TRC_CFG_SYMBOL_MAX_LENGTH too small. Add %d chars.",
				LongestSymbolName);
		}
		LongestSymbolName_last = LongestSymbolName;
	}

	if (MaxBytesTruncated > MaxBytesTruncated_last)
	{
		/* Some string event generated a too long string that was truncated.
		This may happen for the following functions:
		- vTracePrintF
		- vTracePrintF
		- vTraceStoreKernelObjectName
		- vTraceStoreUserEventChannelName
		- vTraceSetISRProperties

		A PSF event may store maximum 60 bytes payload, including data arguments
		and string characters. For User Events, also the User Event Channel ptr
		must be squeezed in, if a channel is specified. */

		vTracePrintF(trcWarningChannel, "String event too long, up to %d bytes truncated.",
			MaxBytesTruncated);

		MaxBytesTruncated_last = MaxBytesTruncated;
	}
}
示例#3
0
void ETH_IRQ_Handler(void)
{
	portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;


	if( ETH_GetDMAFlagStatus(ETH_DMA_FLAG_AIS) == SET) {
		vTracePrintF(xTraceOpenLabel("ETH IRQ"), "AIS received");
		ETH_DMAClearITPendingBit(ETH_DMA_IT_AIS);
		if(ETH_GetDMAFlagStatus(ETH_DMA_IT_RBU) == SET) {
			vTracePrintF(xTraceOpenLabel("ETH IRQ"), "RBU received");
			ETH_DMAClearITPendingBit(ETH_DMA_IT_RBU);
		}
		if(ETH_GetDMAFlagStatus(ETH_DMA_IT_RPS) == SET) {
			vTracePrintF(xTraceOpenLabel("ETH IRQ"), "RPS received");
			ETH_DMAClearITPendingBit(ETH_DMA_IT_RPS);
		}
		if(ETH_GetDMAFlagStatus(ETH_DMA_IT_RO) == SET) {
			vTracePrintF(xTraceOpenLabel("ETH IRQ"), "RO received");
			ETH_DMAClearITPendingBit(ETH_DMA_IT_RO);
		}
		if(ETH_GetDMAFlagStatus(ETH_DMA_IT_FBE) == SET) {
			vTracePrintF(xTraceOpenLabel("ETH IRQ"), "FBE received");
			ETH_DMAClearITPendingBit(ETH_DMA_IT_FBE);
		}
	}

	if( ETH_GetDMAFlagStatus(ETH_DMA_FLAG_NIS) == SET) {
		/* Frame received */
		if ( ETH_GetDMAFlagStatus(ETH_DMA_FLAG_R) == SET)
		{
			//vTracePrintF(xTraceOpenLabel("ETH IRQ"), "R received");
			/* Give the semaphore to wakeup LwIP task (ethernetif_input)*/
			xSemaphoreGiveFromISR( s_xSemaphore, &xHigherPriorityTaskWoken );

			/* Clear the interrupt flags. */
			/* Clear the Eth DMA Rx IT pending bits */
			ETH_DMAClearITPendingBit(ETH_DMA_IT_R);
			ETH_DMAClearITPendingBit(ETH_DMA_IT_NIS);
		}
	}


	/* Switch tasks if necessary. */
	if( xHigherPriorityTaskWoken != pdFALSE )
	{
		portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );
	}
}
示例#4
0
void Communications(void * pvParameters){

	msg.Payload = msgBuff;

	vSemaphoreCreateBinary(DataSmphr);

    if (DataSmphr==NULL){
    	while(1);
    }

    qUART_Register_RBR_Callback(UART_GROUNDCOMM, UART_Rx_Handler);
    qUART_EnableRx(UART_GROUNDCOMM);
    comms_trcLabel = xTraceOpenLabel("Comms task");

	for (;;){
		if (pdTRUE == xSemaphoreTake(DataSmphr,500/portTICK_RATE_MS)){
			vTracePrintF(comms_trcLabel,"Got joystick package");
			switch (msg.Type){
				case MSG_TYPE_CONTROL:
					memcpy(&quadrotor.joystick,msg.Payload,10);
				case MSG_TYPE_DEBUG:
					 break;
				case MSG_TYPE_SYSTEM:
					switch (msg.Payload[0]) {
						case COMMAND_READ:
							commandRead(&msg.Payload[1]);
							break;
						case COMMAND_WRITE:
							commandWrite(&msg.Payload[1]);
							break;
						default:
							break;
					}

					break;
				default:
					break;
			}
		}else{
			// Timeout to get a new joystick commands, values to 0
			vTracePrintF(comms_trcLabel,"Joystick package timeout");
			memset(&quadrotor.joystick,0,sizeof(quadrotor.joystick));
		}
	}
}