FREERTOS学习笔记,任务切换

这篇博客详细介绍了FreeRTOS如何通过滴答定时器中断实现任务切换。xTaskGetSchedulerState()函数用于检查调度器状态,xPortSysTickHandler()中断处理函数中,vPortRaiseBASEPRI()设置中断优先级进入临界区,xTaskIncrementTick()检查并调度任务。PENDSV中断处理函数负责保存当前任务状态并切换到下一个任务,通过调整栈指针和执行vTaskSwitchContext()完成上下文切换。
摘要由CSDN通过智能技术生成

FREERTOS采用滴答定时器周期性产生中断来作为心跳,作为任务切换周期,其中断处理函数如下:

extern void xPortSysTickHandler(void);

void SysTick_Handler(void)
{
   
  /* USER CODE BEGIN SysTick_IRQn 0 */

	if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED)
	{
   
		
		xPortSysTickHandler();
		
	}
	
	
  /* USER CODE END SysTick_IRQn 0 */
  HAL_IncTick();
  /* USER CODE BEGIN SysTick_IRQn 1 */

  /* USER CODE END SysTick_IRQn 1 */
}

xTaskGetSchedulerState()表示获取任务调度器的状态,它主要由以下三个状态:未开始,挂起,运行中。
当其已经开始后,进入xPortSysTickHandler()处理函数。该函数的主要代码有:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值