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_