做网站哪个语言强,漳州模板网站建设,天津 网站建设,公司招聘网1.基本知识 2.任务的状态
FreeRTOS中任务共存在4种状态#xff1a;Running 运行态 当任务处于实际运行状态称之为运行态#xff0c;即CPU的使用权被这个任务占用#xff08;同一时间仅一个任务处于运行态#xff09;。Ready 就绪态 处于就绪态的任务是指那些能够运行Running 运行态 当任务处于实际运行状态称之为运行态即CPU的使用权被这个任务占用同一时间仅一个任务处于运行态。Ready 就绪态 处于就绪态的任务是指那些能够运行没有被阻塞和挂起但是当前没有运行的任务因为同优先级或更高优先级的任务正在运行。Blocked 阻塞态 如果一个任务因延时或等待信号量、消息队列、事件标志组等而处于的状态被称之为阻塞态。Suspended 挂起态 类似暂停通过调用函数 vTaskSuspend() 对指定任务进行挂起挂起后这个任务将不被执行只有调用函数 xTaskResume() 才可以将这个任务从挂起态恢复。 3.综合小实验 4.代码部分
void StartTaskLED2(void const * argument)
{/* USER CODE BEGIN StartTaskLED2 *//* Infinite loop */for(;;){HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);osDelay(500);}/* USER CODE END StartTaskLED2 */
}/* USER CODE BEGIN Header_StartTaskLED1 */
/**
* brief Function implementing the taskLED1 thread.
* param argument: Not used
* retval None
*/
/* USER CODE END Header_StartTaskLED1 */
void StartTaskLED1(void const * argument)
{/* USER CODE BEGIN StartTaskLED1 *//* Infinite loop */for(;;){HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);osDelay(1000);}/* USER CODE END StartTaskLED1 */
}/* USER CODE BEGIN Header_StarttaskKEY1 */
/**
* brief Function implementing the taskKEY1 thread.
* param argument: Not used
* retval None
*/
/* USER CODE END Header_StarttaskKEY1 */
void StarttaskKEY1(void const * argument)
{/* USER CODE BEGIN StarttaskKEY1 *//* Infinite loop */for(;;){if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)GPIO_PIN_RESET){osDelay(20);if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)GPIO_PIN_RESET){printf(KEY1摁下\r\n);if(taskLED1HandleNULL){printf(任务1不存在准备创建任务1\r\n);osThreadDef(taskLED1, StartTaskLED1, osPriorityNormal, 0, 128);taskLED1Handle osThreadCreate(osThread(taskLED1), NULL);if(taskLED1Handle!NULL){printf(任务1创建完成\r\n);}}else{printf(删除任务1\r\n);osThreadTerminate(taskLED1Handle);//删除任务taskLED1HandleNULL;}}while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)GPIO_PIN_RESET);}osDelay(1);}/* USER CODE END StarttaskKEY1 */
}/* USER CODE BEGIN Header_StarttaskKEY2 */
/**
* brief Function implementing the taskKEY2 thread.
* param argument: Not used
* retval None
*/
/* USER CODE END Header_StarttaskKEY2 */
void StarttaskKEY2(void const * argument)
{/* USER CODE BEGIN StarttaskKEY2 */static int flag0;/* Infinite loop */for(;;){if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1)GPIO_PIN_RESET){osDelay(20);if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1)GPIO_PIN_RESET){printf(KEY2摁下\r\n);if(flag0){osThreadSuspend(taskLED2Handle);//挂起任务printf(任务二已经被暂停\r\n);flag1;}else{osThreadResume(taskLED2Handle);//恢复任务printf(任务二已经被恢复\r\n);flag0;}}while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1)GPIO_PIN_RESET);}osDelay(1);}/* USER CODE END StarttaskKEY2 */
}/* Private application code --------------------------------------------------*/
/* USER CODE BEGIN Application *//* USER CODE END Application */