空闲任务与空闲任务钩子函数-重构-改善既有代码的设计[高清版] pdf
1.7空闲任务与空闲任务钩子函数例4中创建的任务大部份时间都处于阻塞态。这种状态下所有的任务都不可运行,所以也不能被调度器选中。但处理器总是需要代码来执行——所以至少要有一个任务处于运行态。为了保证这一点,当调用vTaskStartScheduler()时,调度器会自动创建一个空闲任务。空闲任务是一个非常短小的循环——和早的示例任务十分相似,总是可以运行。空闲任务拥有低优先级(优先级0)以保证其不会妨碍具有更高优先级的应用任务进入运行态——当然,没有任何限制说是不能把应用任务创建在与空闲任务相同的优先级上;如果需要的话,你一样可以和空闲任务一起共享优先级。运行在低优先级可以保证一旦有更高优先级的任务进入就绪态,空闲任务就会立即切出运行态。这一点可以在图9的tn时刻看出来,当任务2退出阻塞态时,空闲任务立即切换出来以让任务2执行。任务2被看作是抢占(pre-empted)了空闲任务。抢占是自动发生的,也并不需要通知被抢占任务。空闲任务钩子函数通过空闲任务钩子函数(或称回调,hook, or call-back),可以直接在空闲任务中添加应用程序相关的功能。空闲任务钩子函数会被空闲任务每循环一次就自动调用一次。通常空闲任务钩子函数被用于: 执行低优先级,后台或需要不停处理的功能代码。 测试处系统处理裕量(空闲任务只会在所有其它任务都不运行时才有机会执行,所以测量出空闲任务占用的处理时间就可以清楚的知道系统有多少富余的处理时间)。 将处理器配置到低功耗模式——提供一种自动省电方法,使得在没有任何应用功能需要处理的时候,系统自动进入省电模式。
3.05MB
文件大小:
评论区