#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 | 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 tskTCB * | prvAllocateTCBAndStack (unsigned short usStackDepth, portSTACK_TYPE *puxStackBuffer) |
static void | prvCheckTasksWaitingTermination (void) |
static void | prvDeleteTCB (tskTCB *pxTCB) |
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 |
unsigned portBASE_TYPE | uxTaskGetNumberOfTasks (void) |
unsigned portBASE_TYPE | uxTaskPriorityGet (xTaskHandle pxTask) |
void | vApplicationStackOverflowHook (xTaskHandle *pxTask, signed char *pcTaskName) |
void | vApplicationTickHook (void) |
void | vTaskDelay (portTickType xTicksToDelay) |
void | vTaskDelayUntil (portTickType *const pxPreviousWakeTime, portTickType xTimeIncrement) |
void | vTaskDelete (xTaskHandle pxTaskToDelete) |
void | vTaskEndScheduler (void) |
void | vTaskIncrementTick (void) |
void | vTaskMissedYield (void) |
void | vTaskPlaceOnEventList (const xList *const pxEventList, portTickType xTicksToWait) |
void | vTaskPrioritySet (xTaskHandle pxTask, unsigned portBASE_TYPE uxNewPriority) |
void | vTaskResume (xTaskHandle pxTaskToResume) |
void | vTaskSetTimeOutState (xTimeOutType *const pxTimeOut) |
void | vTaskStartScheduler (void) |
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 | |
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 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 | uxTasksDeleted = ( 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 xList | xTasksWaitingTermination |
static PRIVILEGED_DATA volatile portTickType | xTickCount = ( portTickType ) 0 |
#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE |
#define prvAddTaskToReadyQueue | ( | pxTCB | ) |
Referenced by prvInitialiseTaskLists(), vTaskPrioritySet(), vTaskResume(), xTaskRemoveFromEventList(), xTaskResumeAll(), and xTaskResumeFromISR().
#define prvCheckDelayedTasks | ( | ) |
Referenced by vTaskIncrementTick().
#define prvGetTCBFromHandle | ( | pxHandle | ) | ( ( ( pxHandle ) == NULL ) ? ( tskTCB * ) pxCurrentTCB : ( tskTCB * ) ( pxHandle ) ) |
Referenced by uxTaskPriorityGet(), vTaskDelete(), vTaskPrioritySet(), and vTaskSuspend().
#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' ) |
#define vWriteTraceToBuffer | ( | ) |
Referenced by vTaskSwitchContext().
typedef struct tskTaskControlBlock tskTCB |
|
static |
References listCURRENT_LIST_LENGTH, prvCheckTasksWaitingTermination(), pxReadyTasksLists, taskYIELD, and void.
|
static |
References listSET_LIST_ITEM_VALUE, pxCurrentTCB, pxDelayedTaskList, pxOverflowDelayedTaskList, vListInsert(), tskTaskControlBlock::xGenericListItem, xNextTaskUnblockTime, and xTickCount.
Referenced by vTaskDelay(), vTaskDelayUntil(), 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, pdFALSE, prvDeleteTCB(), taskENTER_CRITICAL, taskEXIT_CRITICAL, uxCurrentNumberOfTasks, uxTasksDeleted, vListRemove(), vTaskSuspendAll(), tskTaskControlBlock::xGenericListItem, xTaskResumeAll(), and xTasksWaitingTermination.
Referenced by portTASK_FUNCTION().
References tskTaskControlBlock::pxStack, vPortFree(), and vPortFreeAligned.
Referenced by prvCheckTasksWaitingTermination().
|
static |
References configASSERT, configMAX_PRIORITIES, errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY, NULL, pdFALSE, pdPASS, pdTRUE, portPRIVILEGE_BIT, 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::uxPriority, vListInitialiseItem(), void, tskTaskControlBlock::xEventListItem, and tskTaskControlBlock::xGenericListItem.
Referenced by prvInitialiseTaskLists().
unsigned portBASE_TYPE uxTaskGetNumberOfTasks | ( | void | ) |
References uxCurrentNumberOfTasks.
unsigned portBASE_TYPE uxTaskPriorityGet | ( | xTaskHandle | pxTask | ) |
References prvGetTCBFromHandle, taskENTER_CRITICAL, taskEXIT_CRITICAL, and tskTaskControlBlock::uxPriority.
Referenced by low_level_init().
void vApplicationStackOverflowHook | ( | xTaskHandle * | pxTask, |
signed char * | pcTaskName | ||
) |
Referenced by vTaskIncrementTick().
void vTaskDelay | ( | portTickType | xTicksToDelay | ) |
References pdFALSE, portYIELD_WITHIN_API, prvAddCurrentTaskToDelayedList(), pxCurrentTCB, traceTASK_DELAY, vListRemove(), vTaskSuspendAll(), tskTaskControlBlock::xGenericListItem, xTaskResumeAll(), and xTickCount.
Referenced by b_mmi_format_a(), b_mmi_format_b(), b_mmi_mkdir_aLOG(), b_mmi_mkdir_bLOG(), b_USBHostCopyCfg(), b_USBHostCopyLogs(), b_USBHostCopyWeb(), b_USBHostMoveLogs(), e_supervisor_switch_to_maintenance_mode(), lMACBSend(), portTASK_FUNCTION(), and x_supervisor_SemaphoreGive().
void vTaskDelayUntil | ( | portTickType *const | pxPreviousWakeTime, |
portTickType | xTimeIncrement | ||
) |
References configASSERT, pdFALSE, pdTRUE, portYIELD_WITHIN_API, prvAddCurrentTaskToDelayedList(), pxCurrentTCB, traceTASK_DELAY_UNTIL, vListRemove(), vTaskSuspendAll(), tskTaskControlBlock::xGenericListItem, xTaskResumeAll(), and xTickCount.
Referenced by device_mass_storage_task(), host_mass_storage_task(), portTASK_FUNCTION(), prv_vsave_logs(), usb_device_task(), and usb_host_task().
void vTaskDelete | ( | xTaskHandle | pxTaskToDelete | ) |
References NULL, pdFALSE, portYIELD_WITHIN_API, prvGetTCBFromHandle, xLIST_ITEM::pvContainer, pxCurrentTCB, taskENTER_CRITICAL, taskEXIT_CRITICAL, traceTASK_DELETE, uxTaskNumber, uxTasksDeleted, vListInsertEnd(), vListRemove(), tskTaskControlBlock::xEventListItem, tskTaskControlBlock::xGenericListItem, xSchedulerRunning, and xTasksWaitingTermination.
Referenced by bdatalog_start(), portTASK_FUNCTION(), and usb_task().
References pdFALSE, vPortEndScheduler(), and xSchedulerRunning.
References configASSERT, listGET_LIST_ITEM_VALUE, listGET_OWNER_OF_HEAD_ENTRY, listLIST_IS_EMPTY, pdFALSE, 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().
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, traceTASK_PRIORITY_SET, tskTaskControlBlock::uxPriority, vListRemove(), tskTaskControlBlock::xEventListItem, and tskTaskControlBlock::xGenericListItem.
Referenced by low_level_init().
void vTaskResume | ( | xTaskHandle | pxTaskToResume | ) |
References configASSERT, NULL, pdTRUE, portYIELD_WITHIN_API, prvAddTaskToReadyQueue, pxCurrentTCB, taskENTER_CRITICAL, taskEXIT_CRITICAL, traceTASK_RESUME, tskTaskControlBlock::uxPriority, vListRemove(), tskTaskControlBlock::xGenericListItem, and xTaskIsTaskSuspended().
Referenced by prv_v_manage_user_action(), and v_datalog_AddSensorLog().
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().
void vTaskSuspend | ( | xTaskHandle | pxTaskToSuspend | ) |
References NULL, pdFALSE, portYIELD_WITHIN_API, prvGetTCBFromHandle, xLIST_ITEM::pvContainer, pxCurrentTCB, taskENTER_CRITICAL, taskEXIT_CRITICAL, traceTASK_SUSPEND, uxCurrentNumberOfTasks, vListInsertEnd(), vListRemove(), vTaskSwitchContext(), tskTaskControlBlock::xEventListItem, tskTaskControlBlock::xGenericListItem, xSchedulerRunning, and xSuspendedTaskList.
Referenced by portTASK_FUNCTION(), prv_v_manage_user_action(), and v_datalog_AddSensorLog().
References uxSchedulerSuspended.
Referenced by prvCheckTasksWaitingTermination(), pvPortMalloc(), vPortFree(), vTaskDelay(), vTaskDelayUntil(), xQueueGenericReceive(), and xQueueGenericSend().
References configASSERT, listGET_OWNER_OF_NEXT_ENTRY, listLIST_IS_EMPTY, pdFALSE, pdTRUE, pxCurrentTCB, pxReadyTasksLists, taskFIRST_CHECK_FOR_STACK_OVERFLOW, taskSECOND_CHECK_FOR_STACK_OVERFLOW, traceTASK_SWITCHED_IN, traceTASK_SWITCHED_OUT, uxSchedulerSuspended, uxTopReadyPriority, vWriteTraceToBuffer, and xMissedYield.
Referenced by vTaskSuspend().
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 portTASK_FUNCTION(), and xQueueGenericReceive().
portTickType xTaskGetTickCount | ( | void | ) |
References taskENTER_CRITICAL, taskEXIT_CRITICAL, and xTickCount.
Referenced by device_mass_storage_task(), host_mass_storage_task(), portTASK_FUNCTION(), prv_vsave_logs(), prvCheckDelayedList(), prvjoystick_ISR_NonNakedBehaviour(), sys_arch_mbox_fetch(), sys_arch_sem_wait(), usb_device_task(), usb_host_task(), and v_cptime_UpdateLocalTime().
portTickType xTaskGetTickCountFromISR | ( | void | ) |
References portCLEAR_INTERRUPT_MASK_FROM_ISR, portSET_INTERRUPT_MASK_FROM_ISR, and xTickCount.
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, NULL, pdFALSE, pdTRUE, tskTaskControlBlock::xEventListItem, tskTaskControlBlock::xGenericListItem, xPendingReadyList, and xSuspendedTaskList.
Referenced by vTaskResume(), and xTaskResumeFromISR().
signed portBASE_TYPE xTaskRemoveFromEventList | ( | const xList *const | pxEventList | ) |
References configASSERT, listGET_OWNER_OF_HEAD_ENTRY, pdFALSE, pdTRUE, prvAddTaskToReadyQueue, pxCurrentTCB, tskTaskControlBlock::uxPriority, uxSchedulerSuspended, vListInsertEnd(), vListRemove(), tskTaskControlBlock::xEventListItem, tskTaskControlBlock::xGenericListItem, and xPendingReadyList.
Referenced by prvUnlockQueue(), xQueueGenericReceive(), 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, uxMissedTicks, tskTaskControlBlock::uxPriority, uxSchedulerSuspended, vListRemove(), vTaskIncrementTick(), tskTaskControlBlock::xEventListItem, tskTaskControlBlock::xGenericListItem, xMissedYield, and xPendingReadyList.
Referenced by prvCheckTasksWaitingTermination(), pvPortMalloc(), vPortFree(), vTaskDelay(), vTaskDelayUntil(), xQueueGenericReceive(), and xQueueGenericSend().
portBASE_TYPE xTaskResumeFromISR | ( | xTaskHandle | pxTaskToResume | ) |
References configASSERT, pdFALSE, pdTRUE, portCLEAR_INTERRUPT_MASK_FROM_ISR, portSET_INTERRUPT_MASK_FROM_ISR, prvAddTaskToReadyQueue, pxCurrentTCB, traceTASK_RESUME_FROM_ISR, tskTaskControlBlock::uxPriority, uxSchedulerSuspended, vListInsertEnd(), vListRemove(), tskTaskControlBlock::xEventListItem, tskTaskControlBlock::xGenericListItem, xPendingReadyList, and xTaskIsTaskSuspended().
PRIVILEGED_DATA tskTCB* volatile pxCurrentTCB = NULL |
Referenced by prvAddCurrentTaskToDelayedList(), prvInitialiseTaskLists(), vTaskDelay(), vTaskDelayUntil(), vTaskDelete(), vTaskPlaceOnEventList(), vTaskPrioritySet(), vTaskResume(), vTaskSuspend(), vTaskSwitchContext(), xTaskGetCurrentTaskHandle(), xTaskRemoveFromEventList(), xTaskResumeAll(), and xTaskResumeFromISR().
|
static |
Referenced by prvAddCurrentTaskToDelayedList(), prvInitialiseTaskLists(), and vTaskIncrementTick().
|
static |
Referenced by prvAddCurrentTaskToDelayedList(), prvInitialiseTaskLists(), and vTaskIncrementTick().
|
static |
Referenced by portTASK_FUNCTION(), prvInitialiseTaskLists(), vTaskPrioritySet(), and vTaskSwitchContext().
|
static |
|
static |
Referenced by vTaskIncrementTick(), and xTaskResumeAll().
|
static |
|
static |
Referenced by prvInitialiseTaskLists(), and vTaskDelete().
|
static |
Referenced by prvCheckTasksWaitingTermination(), and vTaskDelete().
|
static |
Referenced by vTaskSwitchContext().
|
static |
Referenced by prvInitialiseTaskLists().
|
static |
Referenced by prvInitialiseTaskLists().
|
static |
Referenced by prvInitialiseTaskLists().
|
static |
Referenced by vTaskMissedYield(), vTaskSwitchContext(), and xTaskResumeAll().
|
static |
Referenced by prvAddCurrentTaskToDelayedList(), and vTaskIncrementTick().
|
static |
Referenced by vTaskIncrementTick(), vTaskSetTimeOutState(), and xTaskCheckForTimeOut().
|
static |
Referenced by prvInitialiseTaskLists(), xTaskIsTaskSuspended(), xTaskRemoveFromEventList(), xTaskResumeAll(), and xTaskResumeFromISR().
|
static |
Referenced by prvInitialiseTaskLists(), vTaskDelete(), vTaskEndScheduler(), vTaskStartScheduler(), and vTaskSuspend().
|
static |
Referenced by prvInitialiseTaskLists(), vTaskPlaceOnEventList(), vTaskSuspend(), and xTaskIsTaskSuspended().
|
static |
Referenced by prvCheckTasksWaitingTermination(), prvInitialiseTaskLists(), and vTaskDelete().
|
static |