河北邯郸区号,青岛官网seo公司,东营网上房地产,wordpress 图片cms主题1、任务状态简介
(1)任务状态可以简单的分为运行和非运行。
(2)非运行状态可以细分为#xff1a;阻塞状态、暂停状态、就绪状态。
2、阻塞状态(Blocked)
(1)举例说明#xff1a;在日常生活的例子中#xff0c;母亲在电脑前跟同事沟通时#xff0c;如果同事一直没回复阻塞状态、暂停状态、就绪状态。
2、阻塞状态(Blocked)
(1)举例说明在日常生活的例子中母亲在电脑前跟同事沟通时如果同事一直没回复那么母亲的工作就被卡住了、被堵住了、处于阻塞状态(Blocked)。重点在于母亲在等待。
(2)任务要等待某个事件事件发生后它才能运行在等待事件的过程中这个任务就处于阻塞状态(Blocked)。
(3)阻塞状态的任务不消耗CPU资源。
(4)在阻塞状态的任务它可以等待两种类型的事件时间相关的事件或同步事件。
(5)时间相关的事件
可以等待一段时间我等2分钟也可以一直等待直到某个绝对时间我等到下午3点
(6)同步事件这事件由别的任务或者是中断程序产生
例子1任务A等待任务B给它发送数据例子2任务A等待用户按下按键
(7)同步事件的来源有很多如下所示。
队列(queue)二进制信号量(binary semaphores)计数信号量(counting semaphores)互斥量(mutexes)递归互斥量、递归锁(recursive mutexes)事件组(event groups)任务通知(task notifications)
(8)在等待一个同步事件时可以加上超时时间。比如等待队里数据超时时间设为10ms
10ms之内有数据到来成功返回10ms到了还是没有数据超时返回
3、暂停状态(Suspended)
(1)举例说明在日常生活的例子中母亲正在电脑前跟同事沟通母亲可以暂停
好烦啊我暂停一会。领导说你暂停一下。
(2)FreeRTOS中的任务也可以进入暂停状态唯一的方法是通过vTaskSuspend函数。函数原型如下
/**参数xTaskToSuspend表示要暂停的任务;*如果为NULL表示暂停自己。*/
void vTaskSuspend( TaskHandle_t xTaskToSuspend );
(3)要退出暂停状态只能由别的任务或中断程序来操作。
别的任务调用vTaskResume中断程序调用xTaskResumeFromISR
(4)实际开发中暂停状态用得不多。
4、就绪状态(Ready)
(1)这个任务完全准备好了随时可以运行只是还轮不到它。这时它就处于就绪态(Ready)。
(2)刚创建的任务就处于就绪状态。
5、完整的任务状态转换图