freertos - 작업 관리 데이터 구조 및 관련 API (메모)

11677 단어 FreeRtos 시스템
1, 작업 관련 데이터 구조
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 퀘 스 트 알림
생략

좋은 웹페이지 즐겨찾기