首页 理论教育 程序运行过程:详细解读

程序运行过程:详细解读

时间:2023-06-28 理论教育 版权反馈
【摘要】:系统初始化完毕后,模块BlinkC收到booted()事件,其处理程序为启动周期性模式的计时器。模块BlinkC对该事件的处理程序为调用计时器接口Timer0的startPeriodic命令,该命令表明设置并启动一个周期为1s的计时器。当组件使用关键词“post”时,实际上是调用了TaskBasic.postTask()命令。在Scheduler.taskLoop()中会调度到该任务,并通过runTask()事件通知任务执行,即切换led0开关。事实上,在整个应用的过程中,还有其他任务,比如计时器组件在计时到达时是在任务中向上层通知事件的。

程序运行过程:详细解读

系统初始化完毕后,模块BlinkC收到booted()事件,其处理程序为启动周期性模式的计时器。计时器组件使用MCU上的硬件计时器来计时。接口Boot中只有一个函数,即事件booted()。该事件到达时,表明系统已经启动(即所有组件已经初始化完毕)。模块BlinkC对该事件的处理程序为调用计时器接口Timer0的startPeriodic(1000)命令,该命令表明设置并启动一个周期为1s的计时器。

当时间到达时,计时器组件通知事件Timer0.fired()。在模块BlinkC的Timer0.fired()事件的实现代码中仅使用了一条语句:post toggle(),即提交一个任务toggle(),当任务调度器调度该任务执行时,该任务触发LED(开关转换)。

在TinyOS中,当一个组件用关键词“task”声明一个任务时,实际上就表示它使用了接口TaskBasic的一个实例。当组件使用关键词“post”时,实际上是调用了TaskBasic.postTask()命令。在Scheduler.taskLoop()中会调度到该任务,并通过runTask()事件通知任务执行,即切换led0开关。(www.xing528.com)

由于计时器组件启动的计时器是周期性的,因此,时间间隔到达后会继续重复上述工作。事实上,在整个应用的过程中,还有其他任务,比如计时器组件在计时到达时是在任务中向上层通知事件的。

Leds接口定义了许多命令,诸如led0On()、led0Off()、led0Toggle()等,控制节点上的LED0开、关、置换。这些命令由提供Leds接口的LedsC(实际上是LedsP)实现。

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

我要反馈