根据正点原子FreeRTOS视频整理
单片机:STM32F207VC
FreeRTOS源码版本:v10.0.1
任务挂起和恢复API函数:
工程列表:
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***************************/