实时操作系统中的任务、线程与事件
1. FreeRTOS 任务示例及注意事项
1.1 定时器回调函数
在 FreeRTOS 中,有如下定时器回调函数示例:
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim2);
/* USER CODE END 2 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
/* USER CODE BEGIN Callback 0 */
/* USER CODE END Callback 0 */
if (htim->Instance == TIM6)
{
HAL_IncTick();
}
/* USER CODE BEGIN Callback 1 */
else if (htim->Instance == TIM2)
{
cnt = 3;
printf("timer2 \n\r");
}
/* USER CODE END Callback 1 */
}
需要注意的是,如果在定时器 2 的回调函数中使用了非中断安全的任务函数,系统在执行该函数时会崩溃。例如,在定时器 2 回调函数中打印任务 myTask02
的名称就可能导致这种情况。而唯一的中断安全任务函数是 osThreadGetId
,在定时器 2 回调函数中打印任务 <