ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

3-FreeRTOS 动态任务创建/删除

2020-12-19 16:02:51  阅读:144  来源: 互联网

标签:count Task1 task FreeRTOS 删除 创建 void 任务 Handler


要求:

①用一个任务创建两个任务Task1和Task2后,将自身任务删除

②在Task1执行5次后,用Task1将Task2删除

③Task1执行10次后,将自身删除

 

代码:

  1 #include "FreeRTOS.h"
  2 #include "task.h"
  3 
  4 
  5 //----------------------------------------任务优先级
  6 #define START_TASK_PRIO 1 
  7 #define TASK1_PRIO 2 
  8 #define TASK2_PRIO 3 //优先级高
  9 
 10 //----------------------------------------任务堆栈大小
 11 #define START_STK_SIZE 256 
 12 #define TASK1_STK_SIZE 256 
 13 #define TASK2_STK_SIZE 256 
 14 
 15 
 16 //----------------------------------------任务句柄
 17 TaskHandle_t Task1_Handler; 
 18 TaskHandle_t Task2_Handler; 
 19 TaskHandle_t StartTask_Handler; 
 20 
 21 
 22 //----------------------------------------任务函数
 23 void start_task(void *pvParameters); 
 24 void task1_task(void *pvParameters); 
 25 void task2_task(void *pvParameters); 
 26 
 27 
 28 
 29 int main(void)
 30 {
 31   BaseType_t OS;
 32     
 33   User_GPIO_Init();
 34     Delay_init();
 35     USART_Config();
 36     
 37 //    TIM6_Time_Init(9999,7199);//定时1s
 38 //  TIM7_Time_Init(9999,7199);//定时1s
 39 
 40     
 41     OS= xTaskCreate(
 42                                  (TaskFunction_t        ) start_task,       //任务函数
 43                                  (const char *          )  "start_task",    //任务名
 44                                  (configSTACK_DEPTH_TYPE) START_STK_SIZE,   //堆栈大小
 45                                  (void *                )NULL,              //传递给任务函数的参数
 46                                  (UBaseType_t           ) START_TASK_PRIO,  //任务优先级
 47                                  (TaskHandle_t *        ) &StartTask_Handler  //任务句柄
 48                              );
 49                                  
 50     if(OS==pdPASS) 
 51         GPIO_SetBits(GPIOA, GPIO_Pin_8);
 52         
 53     vTaskStartScheduler(); //开启任务调度
 54     
 55 }
 56 
 57 
 58 void start_task(void *pvParameters)
 59 {
 60  
 61         taskENTER_CRITICAL(); //进入临界区
 62         
 63       //创建任务Task1
 64         xTaskCreate((TaskFunction_t )task1_task, //任务函数
 65         (const char* )"task1_task", //任务名称
 66         (uint16_t )TASK1_STK_SIZE, //任务堆栈大小
 67         (void* )NULL,
 68         (UBaseType_t )TASK1_PRIO, //任务优先级
 69         (TaskHandle_t* )&Task1_Handler); //任务句柄
 70 
 71         
 72         
 73         //创建任务Task2
 74         xTaskCreate((TaskFunction_t )task2_task, //任务函数
 75         (const char* )"task2_task", //任务名称
 76         (uint16_t )TASK2_STK_SIZE, //任务堆栈大小
 77         (void* )NULL,
 78         (UBaseType_t )TASK2_PRIO, //任务优先级
 79         (TaskHandle_t* )&Task2_Handler); //任务句柄
 80                 
 81         
 82         vTaskDelete(StartTask_Handler); //vTaskDelete(NULL)也可以   删除开始任务
 83         taskEXIT_CRITICAL();            //退出临界区
 84 }
 85 
 86 
 87 
 88 void task1_task(void *pvParameters)
 89 {  
 90     uint8_t count_num=0; 
 91    
 92     while(1)
 93     {
 94       count_num++;
 95         printf("任务1执行:%d次\n", count_num);
 96         
 97         if(count_num==5) 
 98         {
 99           vTaskDelete(Task2_Handler);
100             printf("任务2被删除\n");
101         }            
102         if(count_num==10)  
103         {
104             printf("任务1被删除\n");
105           vTaskDelete(NULL);  //将自身任务删除
106             
107         }
108         vTaskDelay(1000);  //延时1000个时钟节拍,就是1s   configTICK_RATE_HZ
109     }
110         
111 }
112  
113 void task2_task(void *pvParameters)
114 {  
115     uint8_t count_num1=0;
116    while(1)
117    {
118          count_num1++;
119      printf("任务2执行:%d次\n", count_num1);
120          vTaskDelay(1000);
121   }
122 }

 

执行结果:

任务2优先级大于任务1

 

标签:count,Task1,task,FreeRTOS,删除,创建,void,任务,Handler
来源: https://www.cnblogs.com/darren-pty/p/14159462.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有