freertos- 任务管理数据结构和相关API (笔记)

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_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值