实时操作系统中的任务、线程与事件
1. FreeRTOS中的任务示例
在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 */
}
需要注意的是,如果在Timer 2回调函数里使用了非中断安全的任务函数,那么系统在执行该函数时就会崩溃。例如,在Timer 2回调函数中打印任务 myTask02 的名称就会导致这种情况。而唯一的中断安全任务函数是 osThreadGetId ,在Timer 2回调函数中打印任务 myTask02 的ID,系统则能正常运行。
超级会员免费看
订阅专栏 解锁全文

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



