Microchip® Advanced Software Framework

tasks.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "include/FreeRTOS.h"
#include "include/task.h"
#include "include/timers.h"
#include "include/StackMacros.h"

Data Structures

struct  tskTaskControlBlock
 

Macros

#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE
 
#define prvAddTaskToReadyQueue(pxTCB)
 
#define prvCheckDelayedTasks()
 
#define prvGetTCBFromHandle(pxHandle)   ( ( ( pxHandle ) == NULL ) ? ( tskTCB * ) pxCurrentTCB : ( tskTCB * ) ( pxHandle ) )
 
#define tskBLOCKED_CHAR   ( ( signed char ) 'B' )
 
#define tskDELETED_CHAR   ( ( signed char ) 'D' )
 
#define tskIDLE_STACK_SIZE   configMINIMAL_STACK_SIZE
 
#define tskREADY_CHAR   ( ( signed char ) 'R' )
 
#define tskSIZE_OF_EACH_TRACE_LINE   ( ( unsigned long ) ( sizeof( unsigned long ) + sizeof( unsigned long ) ) )
 
#define tskSTACK_FILL_BYTE   ( 0xa5U )
 
#define tskSUSPENDED_CHAR   ( ( signed char ) 'S' )
 
#define vWriteTraceToBuffer()
 

Typedefs

typedef struct tskTaskControlBlock tskTCB
 

Functions

static portTASK_FUNCTION (prvIdleTask, pvParameters)
 
static void prvAddCurrentTaskToDelayedList (portTickType xTimeToWake)
 
static tskTCBprvAllocateTCBAndStack (unsigned short usStackDepth, portSTACK_TYPE *puxStackBuffer)
 
static void prvCheckTasksWaitingTermination (void)
 
static void prvInitialiseTaskLists (static void prvCheckTasksWaitingTermination void)
 
static void prvInitialiseTaskLists (void)
 
static void prvInitialiseTCBVariables (tskTCB *pxTCB, const signed char *const pcName, unsigned portBASE_TYPE uxPriority, const xMemoryRegion *const xRegions, unsigned short usStackDepth) PRIVILEGED_FUNCTION
 
static void prvListTaskWithinSingleList (const signed char *pcWriteBuffer, xList *pxList, signed char cStatus)
 
unsigned long ulTaskEndTrace (void)
 
static unsigned short usTaskCheckFreeStackSpace (const unsigned char *pucStackByte)
 
unsigned portBASE_TYPE uxTaskGetNumberOfTasks (void)
 
unsigned portBASE_TYPE uxTaskGetStackHighWaterMark (xTaskHandle xTask)
 task.h More...
 
void vApplicationStackOverflowHook (xTaskHandle *pxTask, signed char *pcTaskName)
 Called if stack overflow during execution. More...
 
void vApplicationTickHook (void)
 This function is called by FreeRTOS each tick. More...
 
void vTaskDelay (portTickType xTicksToDelay)
 
void vTaskEndScheduler (void)
 
void vTaskIncrementTick (void)
 
void vTaskList (signed char *pcWriteBuffer)
 
void vTaskMissedYield (void)
 
void vTaskPlaceOnEventList (const xList *const pxEventList, portTickType xTicksToWait)
 
void vTaskPriorityDisinherit (xTaskHandle *const pxMutexHolder)
 
void vTaskPriorityInherit (xTaskHandle *const pxMutexHolder)
 
void vTaskPrioritySet (xTaskHandle pxTask, unsigned portBASE_TYPE uxNewPriority)
 
void vTaskResume (xTaskHandle pxTaskToResume)
 
void vTaskSetTimeOutState (xTimeOutType *const pxTimeOut)
 
void vTaskStartScheduler (void)
 
void vTaskStartTrace (signed char *pcBuffer, unsigned long ulBufferSize)
 
void vTaskSuspend (xTaskHandle pxTaskToSuspend)
 
void vTaskSuspendAll (void)
 
void vTaskSwitchContext (void)
 
portBASE_TYPE xTaskCheckForTimeOut (xTimeOutType *const pxTimeOut, portTickType *const pxTicksToWait)
 
xTaskHandle xTaskGetCurrentTaskHandle (void)
 
portTickType xTaskGetTickCount (void)
 
portTickType xTaskGetTickCountFromISR (void)
 
signed portBASE_TYPE xTaskIsTaskSuspended (xTaskHandle xTask)
 task. More...
 
signed portBASE_TYPE xTaskRemoveFromEventList (const xList *const pxEventList)
 
signed portBASE_TYPE xTaskResumeAll (void)
 
portBASE_TYPE xTaskResumeFromISR (xTaskHandle pxTaskToResume)
 

Variables

static PRIVILEGED_DATA char pcStatusString [50]
 
static PRIVILEGED_DATA
volatile signed char *volatile 
pcTraceBuffer
 
static PRIVILEGED_DATA signed
char * 
pcTraceBufferEnd
 
static PRIVILEGED_DATA signed
char * 
pcTraceBufferStart
 
PRIVILEGED_DATA tskTCB *volatile pxCurrentTCB = NULL
 
static PRIVILEGED_DATA xList
*volatile 
pxDelayedTaskList
 
static PRIVILEGED_DATA xList
*volatile 
pxOverflowDelayedTaskList
 
static PRIVILEGED_DATA xList pxReadyTasksLists [configMAX_PRIORITIES]
 
static PRIVILEGED_DATA
volatile unsigned
portBASE_TYPE 
uxCurrentNumberOfTasks = ( unsigned portBASE_TYPE ) 0
 
static PRIVILEGED_DATA
volatile unsigned
portBASE_TYPE 
uxMissedTicks = ( unsigned portBASE_TYPE ) 0
 
static unsigned portBASE_TYPE uxPreviousTask = 255U
 
static PRIVILEGED_DATA
volatile unsigned
portBASE_TYPE 
uxSchedulerSuspended = ( unsigned portBASE_TYPE ) pdFALSE
 
static PRIVILEGED_DATA
unsigned portBASE_TYPE 
uxTaskNumber = ( unsigned portBASE_TYPE ) 0
 
static PRIVILEGED_DATA
volatile unsigned
portBASE_TYPE 
uxTopReadyPriority = tskIDLE_PRIORITY
 
static PRIVILEGED_DATA
unsigned portBASE_TYPE 
uxTopUsedPriority = tskIDLE_PRIORITY
 
static PRIVILEGED_DATA xList xDelayedTaskList1
 
static PRIVILEGED_DATA xList xDelayedTaskList2
 
static PRIVILEGED_DATA
volatile portBASE_TYPE 
xMissedYield = ( portBASE_TYPE ) pdFALSE
 
static PRIVILEGED_DATA portTickType xNextTaskUnblockTime = ( portTickType ) portMAX_DELAY
 
static PRIVILEGED_DATA
volatile portBASE_TYPE 
xNumOfOverflows = ( portBASE_TYPE ) 0
 
static PRIVILEGED_DATA xList xPendingReadyList
 
static PRIVILEGED_DATA
volatile signed portBASE_TYPE 
xSchedulerRunning = pdFALSE
 
static PRIVILEGED_DATA xList xSuspendedTaskList
 
static PRIVILEGED_DATA
volatile portTickType 
xTickCount = ( portTickType ) 0
 
static PRIVILEGED_DATA signed
portBASE_TYPE 
xTracing = pdFALSE
 

#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE
#define prvAddTaskToReadyQueue (   pxTCB)
Value:
if( ( pxTCB )->uxPriority > uxTopReadyPriority ) \
{ \
uxTopReadyPriority = ( pxTCB )->uxPriority; \
} \
vListInsertEnd( ( xList * ) &( pxReadyTasksLists[ ( pxTCB )->uxPriority ] ), &( ( pxTCB )->xGenericListItem ) )
void vListInsertEnd(xList *pxList, xListItem *pxNewListItem)
Definition: list.c:96
static PRIVILEGED_DATA xList pxReadyTasksLists[configMAX_PRIORITIES]
Definition: tasks.c:140
static PRIVILEGED_DATA volatile unsigned portBASE_TYPE uxTopReadyPriority
Definition: tasks.c:164
Definition: list.h:119

Referenced by prvInitialiseTaskLists(), vTaskPriorityDisinherit(), vTaskPriorityInherit(), vTaskPrioritySet(), vTaskResume(), xTaskRemoveFromEventList(), xTaskResumeAll(), and xTaskResumeFromISR().

#define prvCheckDelayedTasks ( )

Referenced by vTaskIncrementTick().

#define prvGetTCBFromHandle (   pxHandle)    ( ( ( pxHandle ) == NULL ) ? ( tskTCB * ) pxCurrentTCB : ( tskTCB * ) ( pxHandle ) )
#define tskBLOCKED_CHAR   ( ( signed char ) 'B' )

Referenced by vTaskList().

#define tskDELETED_CHAR   ( ( signed char ) 'D' )

Referenced by vTaskList().

#define tskIDLE_STACK_SIZE   configMINIMAL_STACK_SIZE

Referenced by vTaskStartScheduler().

#define tskREADY_CHAR   ( ( signed char ) 'R' )

Referenced by vTaskList().

#define tskSIZE_OF_EACH_TRACE_LINE   ( ( unsigned long ) ( sizeof( unsigned long ) + sizeof( unsigned long ) ) )

Referenced by vTaskStartTrace().

#define tskSTACK_FILL_BYTE   ( 0xa5U )
#define tskSUSPENDED_CHAR   ( ( signed char ) 'S' )

Referenced by vTaskList().

#define vWriteTraceToBuffer ( )
Value:
{ \
if( xTracing ) \
{ \
{ \
{ \
*( unsigned long * ) pcTraceBuffer = ( unsigned long ) xTickCount; \
pcTraceBuffer += sizeof( unsigned long ); \
*( unsigned long * ) pcTraceBuffer = ( unsigned long ) uxPreviousTask; \
pcTraceBuffer += sizeof( unsigned long ); \
} \
else \
{ \
} \
} \
} \
}
PRIVILEGED_DATA tskTCB *volatile pxCurrentTCB
Definition: tasks.c:136
static unsigned portBASE_TYPE uxPreviousTask
Definition: tasks.c:207
#define tskSIZE_OF_EACH_TRACE_LINE
Definition: tasks.c:202
static PRIVILEGED_DATA volatile signed char *volatile pcTraceBuffer
Definition: tasks.c:203
unsigned portBASE_TYPE uxTCBNumber
Definition: tasks.c:109
static PRIVILEGED_DATA signed portBASE_TYPE xTracing
Definition: tasks.c:206
#define pdFALSE
Definition: projdefs.h:67
static PRIVILEGED_DATA volatile portTickType xTickCount
Definition: tasks.c:162
static PRIVILEGED_DATA signed char * pcTraceBufferEnd
Definition: tasks.c:205

Referenced by vTaskSwitchContext().

typedef struct tskTaskControlBlock tskTCB

static portTASK_FUNCTION ( prvIdleTask  ,
pvParameters   
)
static
static void prvAddCurrentTaskToDelayedList ( portTickType  xTimeToWake)
static
static tskTCB* prvAllocateTCBAndStack ( unsigned short  usStackDepth,
portSTACK_TYPE *  puxStackBuffer 
)
static
static void prvInitialiseTCBVariables ( tskTCB pxTCB,
const signed char *const  pcName,
unsigned portBASE_TYPE  uxPriority,
const xMemoryRegion *const  xRegions,
unsigned short  usStackDepth 
)
static
static void prvListTaskWithinSingleList ( const signed char *  pcWriteBuffer,
xList pxList,
signed char  cStatus 
)
static
unsigned long ulTaskEndTrace ( void  )
static unsigned short usTaskCheckFreeStackSpace ( const unsigned char *  pucStackByte)
static
unsigned portBASE_TYPE uxTaskGetNumberOfTasks ( void  )
unsigned portBASE_TYPE uxTaskGetStackHighWaterMark ( xTaskHandle  xTask)

task.h

unsigned portBASE_TYPE uxTaskGetStackHighWaterMark( xTaskHandle xTask );

INCLUDE_uxTaskGetStackHighWaterMark must be set to 1 in FreeRTOSConfig.h for this function to be available.

Returns the high water mark of the stack associated with xTask. That is, the minimum free stack space there has been (in words, so on a 32 bit machine a value of 1 means 4 bytes) since the task started. The smaller the returned number the closer the task has come to overflowing its stack.

Parameters
xTaskHandle of the task associated with the stack to be checked. Set xTask to NULL to check the stack of the calling task.
Returns
The smallest amount of free stack space there has been (in bytes) since the task referenced by xTask was created.

References prvGetTCBFromHandle, tskTaskControlBlock::pxStack, and usTaskCheckFreeStackSpace().

void vApplicationStackOverflowHook ( xTaskHandle pxTask,
signed char *  pcTaskName 
)

Called if stack overflow during execution.

void vApplicationTickHook ( void  )

This function is called by FreeRTOS each tick.

Referenced by vTaskIncrementTick().

void vTaskEndScheduler ( void  )
void vTaskMissedYield ( void  )

References pdTRUE, and xMissedYield.

Referenced by prvUnlockQueue().

void vTaskStartTrace ( signed char *  pcBuffer,
unsigned long  ulBufferSize 
)
portBASE_TYPE xTaskCheckForTimeOut ( xTimeOutType *const  pxTimeOut,
portTickType *const  pxTicksToWait 
)
xTaskHandle xTaskGetCurrentTaskHandle ( void  )

References pxCurrentTCB.

Referenced by xQueueGenericReceive().

portTickType xTaskGetTickCount ( void  )
portTickType xTaskGetTickCountFromISR ( void  )
signed portBASE_TYPE xTaskIsTaskSuspended ( xTaskHandle  xTask)

task.

h

signed portBASE_TYPE xTaskIsTaskSuspended( xTaskHandle xTask );

Utility task that simply returns pdTRUE if the task referenced by xTask is currently in the Suspended state, or pdFALSE if the task referenced by xTask is in any other state.

References configASSERT, listIS_CONTAINED_WITHIN, pdFALSE, pdTRUE, tskTaskControlBlock::xEventListItem, tskTaskControlBlock::xGenericListItem, xPendingReadyList, and xSuspendedTaskList.

Referenced by vTaskResume(), and xTaskResumeFromISR().

PRIVILEGED_DATA char pcStatusString[50]
static
PRIVILEGED_DATA volatile signed char* volatile pcTraceBuffer
static

Referenced by ulTaskEndTrace(), and vTaskStartTrace().

PRIVILEGED_DATA signed char* pcTraceBufferEnd
static

Referenced by vTaskStartTrace().

PRIVILEGED_DATA signed char* pcTraceBufferStart
static

Referenced by ulTaskEndTrace(), and vTaskStartTrace().

PRIVILEGED_DATA xList* volatile pxOverflowDelayedTaskList
static
PRIVILEGED_DATA volatile unsigned portBASE_TYPE uxCurrentNumberOfTasks = ( unsigned portBASE_TYPE ) 0
static
PRIVILEGED_DATA volatile unsigned portBASE_TYPE uxMissedTicks = ( unsigned portBASE_TYPE ) 0
static
unsigned portBASE_TYPE uxPreviousTask = 255U
static
PRIVILEGED_DATA volatile unsigned portBASE_TYPE uxSchedulerSuspended = ( unsigned portBASE_TYPE ) pdFALSE
static
PRIVILEGED_DATA unsigned portBASE_TYPE uxTaskNumber = ( unsigned portBASE_TYPE ) 0
static

Referenced by prvInitialiseTaskLists().

PRIVILEGED_DATA volatile unsigned portBASE_TYPE uxTopReadyPriority = tskIDLE_PRIORITY
static

Referenced by vTaskSwitchContext().

PRIVILEGED_DATA unsigned portBASE_TYPE uxTopUsedPriority = tskIDLE_PRIORITY
static
PRIVILEGED_DATA xList xDelayedTaskList1
static

Referenced by prvInitialiseTaskLists().

PRIVILEGED_DATA xList xDelayedTaskList2
static

Referenced by prvInitialiseTaskLists().

PRIVILEGED_DATA volatile portBASE_TYPE xMissedYield = ( portBASE_TYPE ) pdFALSE
static
PRIVILEGED_DATA portTickType xNextTaskUnblockTime = ( portTickType ) portMAX_DELAY
static
PRIVILEGED_DATA volatile portBASE_TYPE xNumOfOverflows = ( portBASE_TYPE ) 0
static
PRIVILEGED_DATA volatile signed portBASE_TYPE xSchedulerRunning = pdFALSE
static
PRIVILEGED_DATA signed portBASE_TYPE xTracing = pdFALSE
static

Referenced by ulTaskEndTrace(), and vTaskStartTrace().