目录
挂起恢复相关函数
挂起,即让函数停止运行
恢复,即让函数恢复运行
相关函数如下:
vTaskSuspend();//挂起一个任务,参数为任务对应句柄
vTaskResume();//恢复一个任务
vTaskResumeFromISR(); // 中断服务函数中恢复一个任务的运行,根据实际情况,如果恢复的任务优先级比中断任务高,需要转换;如果低,则不用
具体使用较为简单,挂起和解挂一行代码即可
下边为应用:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "beep.h"
#include "key.h"
#include "FreeRTOS.h"
#include "task.h"
void start_task(void *pvParameters);
TaskHandle_t *StartTask_Handler;
void task1_task(void *pvParameters);
TaskHandle_t *Task1Task_Handler;
void task2_task(void *pvParameters);
TaskHandle_t *Task2Task_Handler;
void key_task(void *pvParameters);
TaskHandle_t *KeyTask_Handler;
int main(void)
{
u8 key;
delay_init(168);
LED_Init();
KEY_Init();
LED0=1;
LED1=1;
xTaskCreate((TaskFunction_t) start_task,
(const char * ) "start_task",
(const uint16_t) 50,
(void * ) NULL,
(UBaseType_t ) 1,
(TaskHandle_t *) &StartTask_Handler );
vTaskStartScheduler() ;
}
void start_task(void *pvParameters)
{
xTaskCreate((TaskFunction_t) task1_task,
(const char * ) "task1_task",
(const uint16_t) 50,
(void * ) NULL,
(UBaseType_t ) 2,
(TaskHandle_t *) &Task1Task_Handler );
xTaskCreate((TaskFunction_t) task2_task,
(const char * ) "task2_task",
(const uint16_t) 50,
(void * ) NULL,
(UBaseType_t ) 3,
(TaskHandle_t *) &Task2Task_Handler );
xTaskCreate((TaskFunction_t) key_task,
(const char * ) "key_task",
(const uint16_t) 50,
(void * ) NULL,
(UBaseType_t ) 4,//优先级最高
(TaskHandle_t *) &KeyTask_Handler );
vTaskDelete(NULL);
}
void task1_task(void *pvParameters)
{
while(1){
LED0=~LED0;
vTaskDelay(500);
LED0=~LED0;
vTaskDelay(500);
}
}
void task2_task(void *pvParameters)
{
while(1)
{
LED1=~LED1;
vTaskDelay(400);
LED1=~LED1;
vTaskDelay(400);
}
}
void key_task(void *pvParameters)
{
u8 key;
while(1)
{
key=KEY_Scan(0);
vTaskDelay(10);
switch(key)
{
case 1:vTaskSuspend(Task1Task_Handler); break;//此处挂起函数1
case 2:vTaskResume(Task1Task_Handler);break;//解挂任务1
case 3:vTaskSuspend(Task2Task_Handler); break;//挂起任务2
case 4:vTaskResume(Task2Task_Handler); break;//解挂任务2
}
}
}