查看: 1790|回复: 0
打印 上一主题 下一主题

TinyOS学习笔记5-Split-Phase操作

[复制链接]
跳转到指定楼层
沙发
发表于 2015-3-25 17:19:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Split-Phase操作

比较以下Blocking和Split-Phase操作的两段代码
Blocking     

if (send() == SUCCESS) {
  sendCount++;
}
在Block的系统中,当要调用一个运行时间很长的操作时,直到操作完成调用才能返回。例如,只有执行完send()才会有返回值。
   
Split-Phase
// start phase
send();

//completion phase
void sendDone(error_t err) {
  if (err == SUCCESS) {
    sendCount++;
  }
}
在Split-Phase操作中,将程序的执行分为两个部分,开始部分和完成部分。
Split-Phase操作的好处:
1.节省内存,与block的操作需要stack相比,节省了内存stack的开销。
2.可以并行运行多个操作。
下面是另一个例子
Blocking:     

state = WAITING;
op1();
sleep(500);
op2();
state = RUNNING

在此个Block的例子中,整个程序需要进行sleep(500)

Split-phase:

state = WAITING;
op1();
call Timer.startOneShot(500);

event void Timer.fired() {
  op2();
  state = RUNNING;
}
此Split-Phase的操作,在调用Timer.startOneShot(500)后,程序立即返回,整个程序并没有停止,过500ms后,自动调用event void Timer.fired()

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表