因仑“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