目录
freertos官方网站https://freertos.org/ 可获取相关文档和引导
一、简述
任务的调度管理是os的核心功能,使用rtos先从任务调度入手
二、基本概念
1、任务状态
freertos共有四种任务状态,运行Running、就绪Ready、阻塞Blocked、暂停Suspended,就是说在某一时刻的某一个任务处于其中一个状态,任务状态切换如下(摘自文档)。
2、任务优先级
每个任务的优先级从0到(configMAX_PRIORITIES-1),其中configMAX_PRIORITIES在FreeRTOSConfig.h中定义。数值越小优先级越低。
3、任务函数原型
当创建任务时,任务函数的函数名会作为创建函数的参数,所以任务函数有一个统一的定义类型,定义如下
/// Entry point of a thread.
typedef void (*osThreadFunc_t) (void *argument);
/*任务函数格式示例*/
void vATaskFunction( void *pvParameters )
{
for( ;; )
{
-- 任务功能在此处编码 --
vTaskDelay(10); //系统延时、进行任务调度
}
vTaskDelete( NULL );
}
三、任务管理函数
1、创建任务函数
①xTaskCreate() //动态创建任务,需要有内存管理,自动分配任务栈空间。
②xTaskCreateStatic() //静态创建任务,编译时创建,手动提供任务栈空间。
③ xTaskCreateRestricted() //创建一个受保护的任务,需要内存管理单元(MPU),一般单片机没有mpu。
函数参数说明在函数的声明处
用法:xTaskCreate() 和xTaskCreateStatic()形参区别
函数名 | xTaskCreate() | xTaskCreateStatic() |
形参 | TaskHandle_t *pxCreatedTask 创建的任务的句柄。 | StackType_t * const puxStackBuffer, 任务栈地址。 StaticTask_t * const pxTaskBuffer 任务控制块地址。 因为是静态的,所以这两部分使用的空间需要手动创建。 |
|
注:xTaskCreateStatic()的返回值是任务的句柄。
2、任务挂起和恢复
- vTaskResume() //恢复任务,参数为任务句柄。
- xTaskResumeAll() //恢复全部任务
- xTaskResumeFromISR() //在中断内恢复任务
- vTaskSuspend() //挂起暂停任务
3、其他基本函数功能简介
函数名 | 功能 |
xTaskAbortDelay() | 取消任务阻塞态,转为就绪态 |
xTaskCheckForTimeOut() | 检查阻塞时间不超过设定的最大时间值 |
vTaskDelay() | 延时 |
vTaskDelayUntil() | 绝对延时 |
vTaskDelete() | 删除任务 |
taskDISABLE_INTERRUPTS() | 关闭中断 |
taskENABLE_INTERRUPTS() | 打开中断 |
taskENTER_CRITICAL | 进入临界区 |
taskEXIT_CRITICAL() | 退出临界区 |
taskENTER_CRITICAL_FROM_ISR() | 在中断中进入临界区 |
taskEXIT_CRITICAL_FROM_ISR() | 在中断中退出临界区 |
xTaskGetApplicationTaskTag() | 获取任务标签值 |
xTaskGetCurrentTaskHandle() | 获取当前任务句柄 |
xTaskGetIdleTaskHandle() | 获取空闲任务句柄 |
xTaskGetHandle() | 根据任务名获取句柄 |