任务调度器的挂起和恢复

  • 挂起后,无法进行任务切换,防止任务与任务之间的资源抢夺
  • 未关闭中断

vTaskSuspendAll()

  • void vTaskSuspendAll( void )
    {
        ++uxSchedulerSuspended;
    }
    //uxSchedulerSuspended != pdFalse 则不进入PendSV中断,则不会进行任务切换
    

xTaskResumeAll()

  • 进入临界区
  • uxSchedulerSuspended–
  • 判断任务数量
  • 清空等待列表,加入到就绪列表(任务在中断中恢复时 加入等待列表 )
  • 判断优先级最高任务 切换任务
  • 更新阻塞任务时间
  • 弥补 任务挂起时 滴答定时器丢失的节拍数
  • 判断是否允许任务切换
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐