RTOS系统的核心就是任务管理,FreeRTOS也不例外。在初步学习的时候首先要掌握的就是任务的创建、删除、挂起和恢复等操作。
我们在学习STM32、和51单片机的时候看到的是一个while函数一直在死循环执行着我们的函数,不可以两个while或者多个while同时跑,如果定义两个while的话会发现只有一个while函数在跑另一个不会执行,FreeRTOS的多任务创建就可以几个while同时跑。
下面将会对其进行讲解:
首先是任务的状态:状态分为四个状态,运行态、就绪态、阻塞态、挂起态,运行态就是任务处于运行的状态,就绪态是处于就绪的状态就是在等待运行的状态,阻塞态就是当前任务正在等待某个外部时间的完成,比如延时函数的使用就是使任务进入了阻塞态。
任务的优先级,每个任务都可以分配一个从0~(configMAX_PRIORITIES-1)的优先级,优先级的数字越小表示优先级越低。
#define START_TASK_PRIO 1 //任务优先级
#define START_STK_SIZE 128 //任务堆栈的大小 128*4 byte
TaskHandle_t StartTask_Handler; //任务句柄
void start_task(void *pvParameters); //任务函数
这是开启任务的一些宏定义
#define LED0_TASK_PRIO 2
#define LED0_STK_SIZE 50
TaskHandle_t LED0Task_Handler;
void led0_task(void *p_arg);
#define LED1_TASK_PRIO 3
#define LED1_STK_SIZE 50
TaskHandle_t LED1Task_Handler;
void led1_task(void *p_arg);
//这是具体的任务,LED0和LED1的操作任务
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, //任务函数
const char * const pcName, //任务名称
const uint16_t usStackDepth,//任务堆栈大小
void * const pvParameters,//传递给任务函数的参数
UBaseType_t uxPriority,//任务优先级
TaskHandle_t * const pxCreatedTask //任务句柄
)
//这是任务创建函数的原型
xTaskCreate((TaskFunction_t )start_task,
(const char* )"start_task",
(uint16_t )START_STK_SIZE,
(void* )NULL,
(UBaseType_t )START_TASK_PRIO,
(TaskHandle_t* )&StartTask_Handler);
vTaskStartScheduler(); //开启任务调度
运用上面的宏定义对任务创建函数的进行配置。下面是具体的任务函数的定义
void start_task(void *pvParameters) //开启任务函数
{
taskENTER_CRITICAL();//进入临界值
xTaskCreate((TaskFunction_t )led0_task,
(const char* )"led0_task",
(uint16_t )LED0_STK_SIZE,
(void* )NULL,
(UBaseType_t )LED0_TASK_PRIO,
(TaskHandle_t* )&LED0Task_Handler);
xTaskCreate((TaskFunction_t )led1_task,
(const char* )"led1_task",
(uint16_t )LED1_STK_SIZE,
(void* )NULL,
(UBaseType_t )LED1_TASK_PRIO,
(TaskHandle_t* )&LED1Task_Handler);
vTaskDelete(StartTask_Handler); //删除开始任务
taskEXIT_CRITICAL(); //退出临界区
}
void led0_task(void *pvParameters)
{
while(1)
{
LED0=~LED0;
vTaskDelay(500);
}
}
void led1_task(void *pvParameters)
{
while(1)
{
LED1=0;
vTaskDelay(100);
LED1=1;
vTaskDelay(100);
}
}
vTaskDelay函数就一个FreeRTOS的延时函数。这里面还有很多的其他的函数,请看后面的更新......