因仑“3+1”工程特种兵精英论坛

标题: TinyOS学习笔记5-Split-Phase操作 [打印本页]

作者: leixiaofeng    时间: 2015-3-25 17:19
标题: TinyOS学习笔记5-Split-Phase操作
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()






欢迎光临 因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) Powered by Discuz! X3.4