根据正点原子FreeRTOS视频整理

单片机:STM32F207VC

FreeRTOS源码版本:v10.0.1

任务挂起和恢复API函数:

FreeRTOS-02任务挂起和恢复

 

工程列表:

FreeRTOS-02任务挂起和恢复

 

1. main.c

  1 /**/
  2 #include "main.h"
  3 #include "gpio.h"
  4 #include "delay.h"
  5 #include "sys.h"
  6 
  7 #include "stm32f2xx_gpio.h"
  8 
  9 #include "FreeRTOS.h"
 10 #include "task.h"
 11 
 12 #define START_TASK_PRIO         1     /*任务优先级*/
 13 #define START_STK_SIZE          128   /*任务堆栈大小*/
 14 TaskHandle_t StartTask_Handle;        /*任务句柄*/
 15 void StartTask(void *pvParameters);   /*任务函数*/
 16 
 17 #define LED1_TASK_PRIO         2
 18 #define LED1_STK_SIZE          50
 19 TaskHandle_t LED1Task_Handle;
 20 void LED1Task(void *pvParameters);
 21 
 22 #define LED2_TASK_PRIO         3
 23 #define LED2_STK_SIZE          50
 24 TaskHandle_t LED2Task_Handle;
 25 void LED2Task(void *pvParameters);
 26 
 27 
 28 uint8_t Counter = 0;
 29 
 30 
 31 
 32 /***** 声明 *****/
 33 static void SystemInitial(void);
 34 
 35 
 36 void StartTask(void *pvParameters)
 37 {
 38   taskENTER_CRITICAL();           /*进入临界区*/
 39   
 40   xTaskCreate((TaskFunction_t )LED1Task,            /*任务函数*/
 41                             (const char *   )"LED1Task",            /*任务名称*/
 42                             (uint16_t       )LED1_STK_SIZE,       /*任务堆栈大小*/
 43                             (void *         )NULL,                /*传递给任务函数的参数*/
 44                             (UBaseType_t    )LED1_TASK_PRIO,      /*任务优先级*/
 45                             (TaskHandle_t   )&LED1Task_Handle);   /*任务句柄*/             
 46               
 47   xTaskCreate((TaskFunction_t )LED2Task,
 48                             (const char *   )"LED2Task",        
 49                             (uint16_t       )LED2_STK_SIZE,
 50                             (void *         )NULL,
 51                             (UBaseType_t    )LED2_TASK_PRIO,
 52                             (TaskHandle_t   )&LED2Task_Handle);
 53 
 54   vTaskDelete(StartTask_Handle);    /*删除开始任务*/
 55   taskEXIT_CRITICAL();              /*推出临界区*/
 56 } 
 57 
 58 
 59 void LED1Task(void *pvParameters)
 60 {
 61   while (1)
 62   {
 63     GPIOE->ODR ^= LED_ALARM;
 64     vTaskDelay(200);
 65 //    DelayNms(2);
 66   }
 67 } 
 68 
 69 void LED2Task(void *pvParameters)
 70 {
 71   while (1)
 72   {
 73     GPIOE->ODR ^= LED_RUN;
 74     vTaskDelay(500);
 75     
 76     Counter++;
 77     if (20 == Counter)
 78     {
 79       vTaskSuspend(LED1Task_Handle);
 80     }
 81     else if (50 == Counter)
 82     {
 83       vTaskResume(LED1Task_Handle);
 84       Counter = 0;
 85     }
 86     else
 87       ;
 88   }
 89 } 
 90 
 91 
 92 static void SystemInitial(void)
 93 {
 94   DelayInitial();
 95   GPIO_Initial();
 96 }
 97 
 98 int main(void)
 99 {
100   SystemInitial();
101  
102   
103   /*创建开始任务*/
104   xTaskCreate((TaskFunction_t )StartTask,           /*任务函数*/
105                             (const char *   )"StartTask",            /*任务名称*/
106                             (uint16_t       )START_STK_SIZE,      /*任务堆栈大小*/
107                             (void *         )NULL,                /*传递给任务函数的参数*/
108                             (UBaseType_t    )START_TASK_PRIO,     /*任务优先级*/
109                             (TaskHandle_t   )&StartTask_Handle);  /*任务句柄*/             
110               
111   /*开启任务调度*/
112   vTaskStartScheduler();
113 }
114 
115 /***************************END OF FILE***************************/
View Code

相关文章: