首页 理论教育 如何实现周期性触发Led0灯状态切换任务

如何实现周期性触发Led0灯状态切换任务

时间:2023-06-28 理论教育 版权反馈
【摘要】:在模块实现中有一类推后调用的函数形式,被称为任务。任务应尽量短,否则会影响其他任务的执行,降低系统响应的灵敏性。此任务是以1000ms为周期来触发Led0灯,切换其亮灭状态。

如何实现周期性触发Led0灯状态切换任务

在模块实现中有一类推后调用的函数形式,被称为任务(task)。任务可以使某个计算逻辑推后一段时间执行。任务相对于其他任务具有原子性,在运行过程中,不必担心其他任务破坏自己的数据。任务应尽量短,否则会影响其他任务的执行,降低系统响应的灵敏性。

定义任务(定义函数)和提交任务(调用函数)都在模块实现部分完成。可以使用两种方式来定义任务和提交任务。对于同一个任务,两种方式不能混用。

1.第一种定义任务和提交任务的方式

task是定义任务时使用的关键字,表明后面的函数是一个任务,任务没有返回值,没有参数。

post是提交任务时使用的关键字。执行该语句,实际上是将任务名所指的任务挂入任务队列后立即返回。任务提交成功返回SUCCESS,否则返回EBUSY。

2.第二种定义任务和提交任务的方式(www.xing528.com)

在TinyOS中提供了一个任务接口TaskBasic,该接口中包括一个提交任务的异步命令和一个通知运行任务的事件。使用该接口来定义任务和提交任务与第一种方式是等价的。

当组件用关键字“task”定义一个任务时,实际上就表示它使用了接口TaskBasic的一个实例。任务的主体就是事件“runTask”,当组件使用关键字“post”时,实际上是调用了命令postTask。每个任务接口都有唯一的标识作为参数来与调度器组件连接,而这个参数是通过以“TinySchedulerC.TaskBasic”字符串为实参的编译函数unique()来获得的。编译函数unique()将在第五章中介绍。

例3.10:BlinkTaskC组件

BlinkTaskC组件使用了第二种定义和提交任务的方式。

此任务是以1000ms为周期来触发Led0灯,切换其亮灭状态。在模块的实现部分,定义了一个名为toggle的任务,此任务调用Leds接口中的命令led0Toggle()来切换Led0的亮灭状态。在事件Boot.booted()中,设定定时器Timer0的值为1000ms,当定时器Timer0的时间到达1000ms时,重新初始化,使定时器重新开始计时。在最后事件Timer0.fired()中,当定时器Timer0被触发时,提交一个任务。

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

我要反馈