实时操作系统中的任务、线程与事件详解
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
超级会员免费看
订阅专栏 解锁全文
2012

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



