首页 理论教育 任务调度器的初始化方法

任务调度器的初始化方法

时间:2026-01-23 理论教育 景枫 版权反馈
【摘要】:TinyOS 2.x中,任务调度器是一个组件。TinyOS调度组件位于system\TinySchedulerC文件中,默认的调度实现模块是SchedulerBasicP。接口TaskBasic用于其他组件提交任务和任务调度器通知执行任务。Scheduler接口用来初始化和运行任务。1)Scheduler.init():该命令是系统初始化时执行的第一条语句,初始化任务队列结构和队列头尾指针。2)Scheduler.runNextTask():从任务队列中取出下一个将要执行任务的标识号,通过TaskBasic.runTask事件通知相应任务。

TinyOS 2.x中,任务调度器是一个组件。调度组件必须协调不同的任务类型。基本类型的任务仍然是无参数、先入先出的。这种任务类型支持TinyOS 1.x中task和post的用法。调度器提供参数化的任务接口,每个与该接口连接的任务要使用函数unique()来获得一个唯一的标识,用该标识来提交任务。TinyOS调度组件位于system\TinySchedulerC文件中,默认的调度实现模块是SchedulerBasicP。如果要采用新的调度算法,可以将配置文件TinySchedulerC放入应用中,且使用新的调度实现模块(比如SchedulerEdfP)来替换SchedulerBasicP。调度实现模块必须提供参数化接口TaskBasic和Scheduler,接口TaskBasic用于支持TinyOS 1.x中post和task的用法。

在TinySchedulerC中提供两个接口:Scheduler和TaskBasic。这两个接口实际上是SchedulerBasicP提供的。接口TaskBasic用于其他组件提交任务和任务调度器通知执行任务。Scheduler接口用来初始化和运行任务。基本类型的任务队列是一个数组,存放任务标识号(即参数化接口TaskBasic的下标)。这与TinyOS 1.x不同。在TinyOS 1.x中,任务队列中存放的是指向任务函数的指针。

1)Scheduler.init():该命令是系统初始化时执行的第一条语句,初始化任务队列结构和队列头尾指针。

2)Scheduler.runNextTask():从任务队列中取出下一个将要执行任务的标识号,通过TaskBasic.runTask事件通知相应任务。

3)Scheduler.taskLoop():这是一个无限循环。该命令是main()函数的最后一条语句,在系统初始化完成后执行。该语句进入任务调度无限循环,即从任务队列中调度任务,执行任务,再调度任务,如此循环下去。当任务队列中没有任务时,可以将MCU置为低功耗状态。(https://www.xing528.com)

如果替换调度来实现一个特殊的应用,则需要将配置文件TinySchedulerC放入该应用中。所有的调度实现模块都要像SchedulerBasicP模块一样提供一个参数化的接口TaskBasic,这是为了支持post和task的用法。所有的调度实现都必须提供接口Scheduler。例如,用调度模块SchedulerEdfP来替换模块SchedulerBasicP,SchedulerEdfP提供了三个接口:

其中,接口TaskEdf如下:

配件TinySchedulerC为:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈