freertos - 작업 관리 데이터 구조 및 관련 API (메모)
11677 단어 FreeRtos 시스템
typedef void * TaskHandle_t;
typedef BaseType_t (*TaskHookFunction_t)( void * );
/* 5 */
typedef enum
{
eRunning = 0, /* , . */
eReady, /* . */
eBlocked, /* . */
eSuspended, /* , , . */
eDeleted, /* , TCB . */
eInvalid /* “ ”. */
} eTaskState;
/* vTaskNotify() . */
typedef enum
{
eNoAction = 0, /* . */
eSetBits, /* . */
eIncrement, /* . */
eSetValueWithOverwrite, /* , . */
eSetValueWithoutOverwrite /* , . */
} eNotifyAction;
/* */
typedef struct xTIME_OUT
{
BaseType_t xOverflowCount;
TickType_t xTimeOnEntering;
} TimeOut_t;
/* MPU */
typedef struct xMEMORY_REGION
{
void *pvBaseAddress;
uint32_t ulLengthInBytes;
uint32_t ulParameters;
} MemoryRegion_t;
/* MPU */
typedef struct xTASK_PARAMETERS
{
TaskFunction_t pvTaskCode;
const char * const pcName; /* */
uint16_t usStackDepth;
void *pvParameters;
UBaseType_t uxPriority;
StackType_t *puxStackBuffer;
MemoryRegion_t xRegions[ portNUM_CONFIGURABLE_REGIONS ];
} TaskParameters_t;
/* uxTaskGetSystemState() , */
typedef struct xTASK_STATUS
{
TaskHandle_t xHandle; /* 。 */
const char *pcTaskName; /* 。 , ! */
UBaseType_t xTaskNumber; /* . */
eTaskState eCurrentState; /* */
UBaseType_t uxCurrentPriority; /* ( )。 */
UBaseType_t uxBasePriority; /* , , 。 configuse_mutex FreeRTOSConfig.h 1 。*/
uint32_t ulRunTimeCounter; /* , 。 */
StackType_t *pxStackBase; /* . */
uint16_t usStackHighWaterMark; /* . */
} TaskStatus_t;
/* eTaskConfirmSleepModeStatus() 。 */
typedef enum
{
eAbortSleep = 0, /* portSUPPORESS_TICKS_AND_SLEEP() , —— . */
eStandardSleep, /* 。 */
eNoTasksWaitingTimeout /* , . */
} eSleepModeStatus;
#define tskIDLE_PRIORITY ( ( UBaseType_t ) 0U )
2, 작업 관련 API
#define taskYIELD() portYIELD()
#define taskENTER_CRITICAL() portENTER_CRITICAL()
#define taskENTER_CRITICAL_FROM_ISR() portSET_INTERRUPT_MASK_FROM_ISR()
#define taskEXIT_CRITICAL() portEXIT_CRITICAL()
#define taskEXIT_CRITICAL_FROM_ISR( x ) portCLEAR_INTERRUPT_MASK_FROM_ISR( x )
#define taskDISABLE_INTERRUPTS() portDISABLE_INTERRUPTS()
#define taskENABLE_INTERRUPTS() portENABLE_INTERRUPTS()
#define taskSCHEDULER_SUSPENDED ( ( BaseType_t ) 0 )
#define taskSCHEDULER_NOT_STARTED ( ( BaseType_t ) 1 )
#define taskSCHEDULER_RUNNING ( ( BaseType_t ) 2 )
PRIVILEGED_FUNCTION void vTaskAllocateMPURegions( TaskHandle_t xTask, const MemoryRegion_t * const pxRegions );
PRIVILEGED_FUNCTION void vTaskDelete( TaskHandle_t xTaskToDelete );
// 。 。 portTICK_PERIOD_MS —— 。
PRIVILEGED_FUNCTION void vTaskDelay( const TickType_t xTicksToDelay );
// 。 , 。
PRIVILEGED_FUNCTION void vTaskDelayUntil( TickType_t * const pxPreviousWakeTime, const TickType_t xTimeIncrement );
PRIVILEGED_FUNCTION BaseType_t xTaskAbortDelay( TaskHandle_t xTask );
PRIVILEGED_FUNCTION UBaseType_t uxTaskPriorityGet( TaskHandle_t xTask );
PRIVILEGED_FUNCTION UBaseType_t uxTaskPriorityGetFromISR( TaskHandle_t xTask );
PRIVILEGED_FUNCTION eTaskState eTaskGetState( TaskHandle_t xTask );
PRIVILEGED_FUNCTION void vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState );
PRIVILEGED_FUNCTION void vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority );
// 。 , , 。
PRIVILEGED_FUNCTION void vTaskSuspend( TaskHandle_t xTaskToSuspend );
// 。
PRIVILEGED_FUNCTION void vTaskResume( TaskHandle_t xTaskToResume );
// xTaskResumeFromISR() , —— 。 。
PRIVILEGED_FUNCTION BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume );
PRIVILEGED_FUNCTION void vTaskStartScheduler( void );
PRIVILEGED_FUNCTION void vTaskEndScheduler( void );
// 。 , 。 vTaskSuspendAll() , , xTaskResumeAll() , 。
PRIVILEGED_FUNCTION void vTaskSuspendAll( void );
// vTaskSuspendAll() , xTaskResumeAll() 。 vTaskSuspend() 。
PRIVILEGED_FUNCTION BaseType_t xTaskResumeAll( void );
// vTaskStartScheduler 。
PRIVILEGED_FUNCTION TickType_t xTaskGetTickCount( void );
PRIVILEGED_FUNCTION TickType_t xTaskGetTickCountFromISR( void );
// 。 、 。 。
PRIVILEGED_FUNCTION UBaseType_t uxTaskGetNumberOfTasks( void );
PRIVILEGED_FUNCTION char *pcTaskGetName( TaskHandle_t xTaskToQuery );
PRIVILEGED_FUNCTION TaskHandle_t xTaskGetHandle( const char *pcNameToQuery );
PRIVILEGED_FUNCTION UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask );
// xTask 。 xTask NULL ( ) 。
PRIVILEGED_FUNCTION BaseType_t xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter );
// 。 xTaskGetIdleTaskHandle() 。
PRIVILEGED_FUNCTION TaskHandle_t xTaskGetIdleTaskHandle( void );
PRIVILEGED_FUNCTION UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray, const UBaseType_t uxArraySize, uint32_t * const pulTotalRunTime );
PRIVILEGED_FUNCTION void vTaskList( char * pcWriteBuffer ); /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
PRIVILEGED_FUNCTION void vTaskGetRunTimeStats( char *pcWriteBuffer );
PRIVILEGED_FUNCTION BaseType_t xTaskGenericNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue );
#define xTaskNotify( xTaskToNotify, ulValue, eAction ) xTaskGenericNotify( ( xTaskToNotify ), ( ulValue ), ( eAction ), NULL )
#define xTaskNotifyAndQuery( xTaskToNotify, ulValue, eAction, pulPreviousNotifyValue ) xTaskGenericNotify( ( xTaskToNotify ), ( ulValue ), ( eAction ), ( pulPreviousNotifyValue ) )
PRIVILEGED_FUNCTION BaseType_t xTaskGenericNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue, BaseType_t *pxHigherPriorityTaskWoken );
#define xTaskNotifyFromISR( xTaskToNotify, ulValue, eAction, pxHigherPriorityTaskWoken ) xTaskGenericNotifyFromISR( ( xTaskToNotify ), ( ulValue ), ( eAction ), NULL, ( pxHigherPriorityTaskWoken ) )
#define xTaskNotifyAndQueryFromISR( xTaskToNotify, ulValue, eAction, pulPreviousNotificationValue, pxHigherPriorityTaskWoken ) xTaskGenericNotifyFromISR( ( xTaskToNotify ), ( ulValue ), ( eAction ), ( pulPreviousNotificationValue ), ( pxHigherPriorityTaskWoken ) )
// xTaskNotifyWait()[ ] , ulTaskNotifyTake()[ ] 。 , CPU 。
PRIVILEGED_FUNCTION BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait );
//xTaskNotifyGive() , 。 FreeRTOS xSemaphoreGive() API , xTaskNotifyGive()。
#define xTaskNotifyGive( xTaskToNotify ) xTaskGenericNotify( ( xTaskToNotify ), ( 0 ), eIncrement, NULL )
PRIVILEGED_FUNCTION void vTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, BaseType_t *pxHigherPriorityTaskWoken );
// ulTaskNotifyTake() 、 。 FreeRTOS xSemaphoreTake() API , ulTaskNotifyTake()。
PRIVILEGED_FUNCTION uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait );
// xTask enootification, eNotWaitingNotification。 。 xTask NULL 。
BaseType_t xTaskNotifyStateClear( TaskHandle_t xTask );
// ( ) , , .
PRIVILEGED_FUNCTION BaseType_t xTaskIncrementTick( void );
// , 。 ( ) , 。
PRIVILEGED_FUNCTION void vTaskPlaceOnEventList( List_t * const pxEventList, const TickType_t xTicksToWait );
PRIVILEGED_FUNCTION void vTaskPlaceOnUnorderedEventList( List_t * pxEventList, const TickType_t xItemValue, const TickType_t xTicksToWait );
// vTaskPlaceOnEventList() 。 , , vTaskPlaceOnEventList() 。
PRIVILEGED_FUNCTION void vTaskPlaceOnEventListRestricted( List_t * const pxEventList, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely );
// ,
PRIVILEGED_FUNCTION BaseType_t xTaskRemoveFromEventList( const List_t * const pxEventList );
PRIVILEGED_FUNCTION BaseType_t xTaskRemoveFromUnorderedEventList( ListItem_t * pxEventListItem, const TickType_t xItemValue );
// TCB TCB。
PRIVILEGED_FUNCTION void vTaskSwitchContext( void );
// 。 。
PRIVILEGED_FUNCTION TickType_t uxTaskResetEventItemValue( void );
// 。
PRIVILEGED_FUNCTION TaskHandle_t xTaskGetCurrentTaskHandle( void );
// 。
PRIVILEGED_FUNCTION void vTaskSetTimeOutState( TimeOut_t * const pxTimeOut );
// , 。
PRIVILEGED_FUNCTION BaseType_t xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut, TickType_t * const pxTicksToWait );
// , taskYIELD() ;
PRIVILEGED_FUNCTION void vTaskMissedYield( void );
// taskSCHEDULER_RUNNING、taskSCHEDULER_NOT_STARTED taskscheduler _suspend。
PRIVILEGED_FUNCTION BaseType_t xTaskGetSchedulerState( void );
// , 。
PRIVILEGED_FUNCTION void vTaskPriorityInherit( TaskHandle_t const pxMutexHolder );
// , 。
PRIVILEGED_FUNCTION BaseType_t xTaskPriorityDisinherit( TaskHandle_t const pxMutexHolder );
// xTask uxTCBNumber
PRIVILEGED_FUNCTION UBaseType_t uxTaskGetTaskNumber( TaskHandle_t xTask );
// xTask uxTaskNumber uxHandle
PRIVILEGED_FUNCTION void vTaskSetTaskNumber( TaskHandle_t xTask, const UBaseType_t uxHandle );
// configUSE_TICKLESS_IDLE 1 。 tickless , , tick 。 , tick count 。
PRIVILEGED_FUNCTION void vTaskStepTick( const TickType_t xTicksToJump );
// configUSE_TICKLESS_IDLE 1 。 portSUPPRESS_TICKS_AND_SLEEP() , sleep , , 。
PRIVILEGED_FUNCTION eSleepModeStatus eTaskConfirmSleepModeStatus( void );
// 。 , , 。
PRIVILEGED_FUNCTION void *pvTaskIncrementMutexHeldCount( void );
3, 중요 한 인터페이스
3.1 퀘 스 트 의 연결 및 복구
void vTaskSuspend(TaskHandle_t xTaskToSuspend); void vTaskResume(TaskHandle_t xTaskToResume); BaseType_t xTaskResumeFromISR(TaskHandle_t xTaskToResume);
3.2 작업 생 성 및 삭제
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, const char * const pcName, const uint16_t usStackDepth, void * const pvParameters,UBaseType_t uxPriority, TaskHandle_t * const pxCreatedTask )
void vTaskDelete( TaskHandle_t xTaskToDelete )
3.3 태 스 크 스케줄 러
PRIVILEGED_FUNCTION void vTaskSuspendAll(void); PRIVILEGED_FUNCTION BaseType_t xTaskResumeAll(void);
3.4 퀘 스 트 지연
PRIVILEGED_FUNCTION void vTaskDelete(TaskHandle_t xTaskToDelete); PRIVILEGED_FUNCTION void vTaskDelay(const TickType_t xTicksToDelay); PRIVILEGED_FUNCTION void vTaskDelayUntil(TickType_t * const pxPreviousWakeTime,const TickType_t xTimeIncrement);
3.5 퀘 스 트 알림
생략