1、说明
在freeRTOS中创建两个任务,当按键第一次被按下后,任务1挂起,当再按下按键后 任务1恢复,
2、添加任务


3、线程1代码实现
/* USER CODE BEGIN Header_LED_Thread1 */
/**
* @brief Function implementing the LED1 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_LED_Thread1 */
void LED_Thread1(void const * argument)
{
/* USER CODE BEGIN 5 */
/* Infinite loop */
static uint8_t timerCount = 0;
static uint8_t state = 0;
for(;;)
{
osDelay(10);
if( HAL_GPIO_ReadPin(GPIOE,Key1_Pin) == 0 ) {
timerCount++;
if(timerCount >=25 ) {
timerCount = 0;
state = !state;
}
}
if( state) {
osThreadResume(LED2Handle);
} else {
osThreadSuspend(LED2Handle);
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_SET);
}
}
/* USER CODE END 5 */
}
4、线程2代码实现
/* USER CODE BEGIN Header_LED2_Thread */
/**
* @brief Function implementing the LED2 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_LED2_Thread */
void LED2_Thread(void const * argument)
{
/* USER CODE BEGIN LED2_Thread */
/* Infinite loop */
for(;;)
{
osDelay(200);
HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_9);
}
/* USER CODE END LED2_Thread */
}
本文介绍了一个基于FreeRTOS的任务调度案例,包含两个任务:任务1通过读取GPIO状态控制任务2的挂起与恢复,任务2则负责周期性地切换LED状态。通过按键操作实现了任务间的交互。
1万+

被折叠的 条评论
为什么被折叠?



