#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 | taskRECORD_READY_PRIORITY(uxPriority) portRECORD_READY_PRIORITY( uxPriority, uxTopReadyPriority ) |
#define | taskRESET_READY_PRIORITY(uxPriority) |
#define | taskSELECT_HIGHEST_PRIORITY_TASK() |
#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 | tskSTACK_FILL_BYTE ( 0xa5U ) |
#define | tskSUSPENDED_CHAR ( ( signed char ) 'S' ) |
Typedefs | |
typedef struct tskTaskControlBlock | tskTCB |
Variables | |
static PRIVILEGED_DATA char | pcStatsString [50] |
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 unsigned long | ulTaskSwitchedInTime = 0UL |
static PRIVILEGED_DATA volatile unsigned portBASE_TYPE | uxCurrentNumberOfTasks = ( unsigned portBASE_TYPE ) 0U |
static PRIVILEGED_DATA volatile unsigned portBASE_TYPE | uxMissedTicks = ( unsigned portBASE_TYPE ) 0U |
static PRIVILEGED_DATA volatile unsigned portBASE_TYPE | uxSchedulerSuspended = ( unsigned portBASE_TYPE ) pdFALSE |
static PRIVILEGED_DATA unsigned portBASE_TYPE | uxTaskNumber = ( unsigned portBASE_TYPE ) 0U |
static PRIVILEGED_DATA volatile unsigned portBASE_TYPE | uxTasksDeleted = ( unsigned portBASE_TYPE ) 0U |
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 volatile 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 | xTasksWaitingTermination |
static PRIVILEGED_DATA volatile portTickType | xTickCount = ( portTickType ) 0U |
#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE |
#define prvAddTaskToReadyQueue | ( | pxTCB | ) |
Referenced by prvInitialiseTaskLists(), vTaskPriorityDisinherit(), vTaskPriorityInherit(), vTaskPrioritySet(), xTaskRemoveFromEventList(), and xTaskResumeAll().
#define prvCheckDelayedTasks | ( | ) |
Referenced by vTaskIncrementTick().
#define prvGetTCBFromHandle | ( | pxHandle | ) | ( ( ( pxHandle ) == NULL ) ? ( tskTCB * ) pxCurrentTCB : ( tskTCB * ) ( pxHandle ) ) |
Referenced by vTaskDelete(), and vTaskPrioritySet().
#define taskRECORD_READY_PRIORITY | ( | uxPriority | ) | portRECORD_READY_PRIORITY( uxPriority, uxTopReadyPriority ) |
#define taskRESET_READY_PRIORITY | ( | uxPriority | ) |
Referenced by vTaskDelete(), vTaskPriorityDisinherit(), vTaskPriorityInherit(), and vTaskPrioritySet().
#define taskSELECT_HIGHEST_PRIORITY_TASK | ( | ) |
Referenced by vTaskSwitchContext().
#define tskBLOCKED_CHAR ( ( signed char ) 'B' ) |
#define tskDELETED_CHAR ( ( signed char ) 'D' ) |
#define tskIDLE_STACK_SIZE configMINIMAL_STACK_SIZE |
Referenced by vTaskStartScheduler().
#define tskREADY_CHAR ( ( signed char ) 'R' ) |
#define tskSTACK_FILL_BYTE ( 0xa5U ) |
Referenced by prvAllocateTCBAndStack().
#define tskSUSPENDED_CHAR ( ( signed char ) 'S' ) |
typedef struct tskTaskControlBlock tskTCB |
|
static |
|
static |
References listSET_LIST_ITEM_VALUE, pxCurrentTCB, pxDelayedTaskList, pxOverflowDelayedTaskList, vListInsert(), tskTaskControlBlock::xGenericListItem, xNextTaskUnblockTime, and xTickCount.
Referenced by vTaskDelay(), and vTaskPlaceOnEventList().
|
static |
References NULL, pvPortMalloc(), pvPortMallocAligned, tskTaskControlBlock::pxStack, tskSTACK_FILL_BYTE, and vPortFree().
Referenced by prvInitialiseTaskLists().
References listGET_OWNER_OF_HEAD_ENTRY, listLIST_IS_EMPTY, prvDeleteTCB(), taskENTER_CRITICAL, taskEXIT_CRITICAL, uxCurrentNumberOfTasks, uxListRemove(), uxTasksDeleted, vTaskSuspendAll(), tskTaskControlBlock::xGenericListItem, xTaskResumeAll(), and xTasksWaitingTermination.
Referenced by portTASK_FUNCTION().
References portCLEAN_UP_TCB, tskTaskControlBlock::pxStack, vPortFree(), and vPortFreeAligned.
Referenced by prvCheckTasksWaitingTermination().
|
static |
References listGET_OWNER_OF_NEXT_ENTRY, pcStatsString, tskTaskControlBlock::pcTaskName, and tskTaskControlBlock::ulRunTimeCounter.
Referenced by vTaskGetRunTimeStats().
|
static |
References configASSERT, configMAX_PRIORITIES, errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY, NULL, pdFALSE, pdPASS, pdTRUE, portALIGNMENT_ASSERT_pxCurrentTCB, portPOINTER_SIZE_TYPE, portPRIVILEGE_BIT, portSETUP_TCB, portYIELD_WITHIN_API, prvAddTaskToReadyQueue, prvAllocateTCBAndStack(), prvInitialiseTCBVariables(), pxCurrentTCB, pxPortInitialiseStack(), tskTaskControlBlock::pxStack, tskTaskControlBlock::pxTopOfStack, taskENTER_CRITICAL, taskEXIT_CRITICAL, traceTASK_CREATE, traceTASK_CREATE_FAILED, uxCurrentNumberOfTasks, tskTaskControlBlock::uxPriority, uxTaskNumber, uxTopUsedPriority, and xSchedulerRunning.
|
static |
References configMAX_PRIORITIES, configMAX_TASK_NAME_LEN, listSET_LIST_ITEM_OWNER, listSET_LIST_ITEM_VALUE, NULL, tskTaskControlBlock::pcTaskName, tskTaskControlBlock::pxStack, tskTaskControlBlock::ulRunTimeCounter, tskTaskControlBlock::uxBasePriority, tskTaskControlBlock::uxPriority, vListInitialiseItem(), void, tskTaskControlBlock::xEventListItem, and tskTaskControlBlock::xGenericListItem.
Referenced by prvInitialiseTaskLists().
unsigned portBASE_TYPE uxTaskGetNumberOfTasks | ( | void | ) |
References uxCurrentNumberOfTasks.
void vApplicationStackOverflowHook | ( | xTaskHandle | pxTask, |
signed char * | pcTaskName | ||
) |
Run time stack overflow checking is performed if configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook function is called if a stack overflow is detected.
References taskDISABLE_INTERRUPTS, and void.
This function will be called by each tick interrupt if configUSE_TICK_HOOK is set to 1 in FreeRTOSConfig.h. User code can be added here, but the tick hook is called from an interrupt context, so code must not attempt to block, and only the interrupt safe FreeRTOS API functions can be used (those that end in FromISR()).
Referenced by vTaskIncrementTick().
void vTaskDelay | ( | portTickType | xTicksToDelay | ) |
void vTaskDelete | ( | xTaskHandle | pxTaskToDelete | ) |
References NULL, pdFALSE, portYIELD_WITHIN_API, prvGetTCBFromHandle, xLIST_ITEM::pvContainer, pxCurrentTCB, taskENTER_CRITICAL, taskEXIT_CRITICAL, taskRESET_READY_PRIORITY, traceTASK_DELETE, uxListRemove(), tskTaskControlBlock::uxPriority, uxTaskNumber, uxTasksDeleted, vListInsertEnd(), tskTaskControlBlock::xEventListItem, tskTaskControlBlock::xGenericListItem, xSchedulerRunning, and xTasksWaitingTermination.
Referenced by http_request(), and http_task().
References pdFALSE, vPortEndScheduler(), and xSchedulerRunning.
void vTaskGetRunTimeStats | ( | signed char * | pcWriteBuffer | ) |
References configASSERT, listGET_LIST_ITEM_VALUE, listGET_OWNER_OF_HEAD_ENTRY, listLIST_IS_EMPTY, prvCheckDelayedTasks, pxDelayedTaskList, pxOverflowDelayedTaskList, traceTASK_INCREMENT_TICK, uxMissedTicks, uxSchedulerSuspended, vApplicationTickHook(), tskTaskControlBlock::xGenericListItem, xNextTaskUnblockTime, xNumOfOverflows, and xTickCount.
Referenced by xTaskResumeAll().
References pdTRUE, and xMissedYield.
Referenced by prvUnlockQueue().
References configASSERT, prvAddCurrentTaskToDelayedList(), pxCurrentTCB, uxListRemove(), tskTaskControlBlock::uxPriority, uxTopReadyPriority, vListInsert(), vListInsertEnd(), tskTaskControlBlock::xEventListItem, tskTaskControlBlock::xGenericListItem, and xTickCount.
Referenced by xQueueGenericReceive(), and xQueueGenericSend().
void vTaskPriorityDisinherit | ( | xTaskHandle *const | pxMutexHolder | ) |
References configMAX_PRIORITIES, listSET_LIST_ITEM_VALUE, NULL, prvAddTaskToReadyQueue, taskRESET_READY_PRIORITY, traceTASK_PRIORITY_DISINHERIT, tskTaskControlBlock::uxBasePriority, uxListRemove(), tskTaskControlBlock::uxPriority, tskTaskControlBlock::xEventListItem, and tskTaskControlBlock::xGenericListItem.
Referenced by prvCopyDataToQueue().
void vTaskPriorityInherit | ( | xTaskHandle *const | pxMutexHolder | ) |
References configMAX_PRIORITIES, listIS_CONTAINED_WITHIN, listSET_LIST_ITEM_VALUE, NULL, prvAddTaskToReadyQueue, pxCurrentTCB, pxReadyTasksLists, taskRESET_READY_PRIORITY, traceTASK_PRIORITY_INHERIT, uxListRemove(), tskTaskControlBlock::uxPriority, tskTaskControlBlock::xEventListItem, and tskTaskControlBlock::xGenericListItem.
Referenced by xQueueGenericReceive().
void vTaskPrioritySet | ( | xTaskHandle | pxTask, |
unsigned portBASE_TYPE | uxNewPriority | ||
) |
References configASSERT, configMAX_PRIORITIES, listIS_CONTAINED_WITHIN, listSET_LIST_ITEM_VALUE, NULL, pdFALSE, pdTRUE, portYIELD_WITHIN_API, prvAddTaskToReadyQueue, prvGetTCBFromHandle, pxCurrentTCB, pxReadyTasksLists, taskENTER_CRITICAL, taskEXIT_CRITICAL, taskRESET_READY_PRIORITY, traceTASK_PRIORITY_SET, tskTaskControlBlock::uxBasePriority, uxListRemove(), tskTaskControlBlock::uxPriority, void, tskTaskControlBlock::xEventListItem, and tskTaskControlBlock::xGenericListItem.
void vTaskSetTimeOutState | ( | xTimeOutType *const | pxTimeOut | ) |
References configASSERT, xNumOfOverflows, xTIME_OUT::xOverflowCount, xTickCount, and xTIME_OUT::xTimeOnEntering.
Referenced by xQueueGenericReceive(), xQueueGenericSend(), and xTaskCheckForTimeOut().
References configASSERT, NULL, pdPASS, pdTRUE, portCONFIGURE_TIMER_FOR_RUN_TIME_STATS, portPRIVILEGE_BIT, tskIDLE_PRIORITY, tskIDLE_STACK_SIZE, xPortStartScheduler(), xSchedulerRunning, xTaskCreate, xTickCount, and xTimerCreateTimerTask().
Referenced by main().
References uxSchedulerSuspended.
Referenced by portTASK_FUNCTION(), prvCheckTasksWaitingTermination(), pvPortMalloc(), vPortFree(), vTaskDelay(), vTaskGetRunTimeStats(), xQueueGenericReceive(), and xQueueGenericSend().
References pdTRUE, portGET_RUN_TIME_COUNTER_VALUE, pxCurrentTCB, taskFIRST_CHECK_FOR_STACK_OVERFLOW, taskSECOND_CHECK_FOR_STACK_OVERFLOW, taskSELECT_HIGHEST_PRIORITY_TASK, traceTASK_SWITCHED_IN, traceTASK_SWITCHED_OUT, tskTaskControlBlock::ulRunTimeCounter, ulTaskSwitchedInTime, uxSchedulerSuspended, and xMissedYield.
portBASE_TYPE xTaskCheckForTimeOut | ( | xTimeOutType *const | pxTimeOut, |
portTickType *const | pxTicksToWait | ||
) |
References configASSERT, pdFALSE, pdTRUE, taskENTER_CRITICAL, taskEXIT_CRITICAL, vTaskSetTimeOutState(), xNumOfOverflows, xTIME_OUT::xOverflowCount, xTickCount, and xTIME_OUT::xTimeOnEntering.
Referenced by xQueueGenericReceive(), and xQueueGenericSend().
xTaskHandle xTaskGetCurrentTaskHandle | ( | void | ) |
References pxCurrentTCB.
Referenced by xQueueGenericReceive(), xQueueGiveMutexRecursive(), and xQueueTakeMutexRecursive().
portTickType xTaskGetTickCount | ( | void | ) |
References taskENTER_CRITICAL, taskEXIT_CRITICAL, and xTickCount.
Referenced by cgi_status(), sys_arch_mbox_fetch(), and sys_arch_sem_wait().
portTickType xTaskGetTickCountFromISR | ( | void | ) |
References portCLEAR_INTERRUPT_MASK_FROM_ISR, portSET_INTERRUPT_MASK_FROM_ISR, and xTickCount.
signed portBASE_TYPE xTaskRemoveFromEventList | ( | const xList *const | pxEventList | ) |
References configASSERT, listGET_OWNER_OF_HEAD_ENTRY, pdFALSE, pdTRUE, prvAddTaskToReadyQueue, pxCurrentTCB, uxListRemove(), tskTaskControlBlock::uxPriority, uxSchedulerSuspended, vListInsertEnd(), tskTaskControlBlock::xEventListItem, tskTaskControlBlock::xGenericListItem, and xPendingReadyList.
Referenced by prvUnlockQueue(), xQueueGenericReceive(), xQueueGenericReset(), xQueueGenericSend(), xQueueGenericSendFromISR(), and xQueueReceiveFromISR().
signed portBASE_TYPE xTaskResumeAll | ( | void | ) |
References configASSERT, listGET_OWNER_OF_HEAD_ENTRY, listLIST_IS_EMPTY, pdFALSE, pdTRUE, portYIELD_WITHIN_API, prvAddTaskToReadyQueue, pxCurrentTCB, taskENTER_CRITICAL, taskEXIT_CRITICAL, uxCurrentNumberOfTasks, uxListRemove(), uxMissedTicks, tskTaskControlBlock::uxPriority, uxSchedulerSuspended, vTaskIncrementTick(), tskTaskControlBlock::xEventListItem, tskTaskControlBlock::xGenericListItem, xMissedYield, and xPendingReadyList.
Referenced by portTASK_FUNCTION(), prvCheckTasksWaitingTermination(), pvPortMalloc(), vPortFree(), vTaskDelay(), vTaskGetRunTimeStats(), xQueueGenericReceive(), and xQueueGenericSend().
|
static |
Referenced by prvGenerateRunTimeStatsForTasksInList().
PRIVILEGED_DATA tskTCB* volatile pxCurrentTCB = NULL |
|
static |
Referenced by prvAddCurrentTaskToDelayedList(), prvInitialiseTaskLists(), vTaskGetRunTimeStats(), and vTaskIncrementTick().
|
static |
Referenced by prvAddCurrentTaskToDelayedList(), prvInitialiseTaskLists(), vTaskGetRunTimeStats(), and vTaskIncrementTick().
|
static |
Referenced by portTASK_FUNCTION(), prvInitialiseTaskLists(), vTaskGetRunTimeStats(), vTaskPriorityInherit(), and vTaskPrioritySet().
|
static |
Referenced by vTaskSwitchContext().
|
static |
Referenced by prvCheckTasksWaitingTermination(), prvInitialiseTaskLists(), uxTaskGetNumberOfTasks(), and xTaskResumeAll().
|
static |
Referenced by vTaskIncrementTick(), and xTaskResumeAll().
|
static |
Referenced by vTaskIncrementTick(), vTaskSuspendAll(), vTaskSwitchContext(), xTaskRemoveFromEventList(), and xTaskResumeAll().
|
static |
Referenced by prvInitialiseTaskLists(), and vTaskDelete().
|
static |
Referenced by prvCheckTasksWaitingTermination(), and vTaskDelete().
|
static |
Referenced by vTaskDelay(), and vTaskPlaceOnEventList().
|
static |
Referenced by prvInitialiseTaskLists(), and vTaskGetRunTimeStats().
|
static |
Referenced by prvInitialiseTaskLists().
|
static |
Referenced by prvInitialiseTaskLists().
|
static |
Referenced by vTaskMissedYield(), vTaskSwitchContext(), and xTaskResumeAll().
|
static |
Referenced by portTASK_FUNCTION(), prvAddCurrentTaskToDelayedList(), and vTaskIncrementTick().
|
static |
Referenced by vTaskIncrementTick(), vTaskSetTimeOutState(), and xTaskCheckForTimeOut().
|
static |
Referenced by prvInitialiseTaskLists(), xTaskRemoveFromEventList(), and xTaskResumeAll().
|
static |
Referenced by prvInitialiseTaskLists(), vTaskDelete(), vTaskEndScheduler(), and vTaskStartScheduler().
|
static |
Referenced by prvCheckTasksWaitingTermination(), prvInitialiseTaskLists(), vTaskDelete(), and vTaskGetRunTimeStats().
|
static |