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