TinyOS中的同步处理是指同步代码从运行开始一直占用CPU直到运行完毕,同步的缺点在于在此期间其他代码没有任何运行的机会,若一段代码长期占用CPU,则相当于是“死循环”,如在例子程序BlinkTask中,有下面这段代码:
event void Timer0.fired(){
unit32_t i;
for(i=0; i<400001; i++)
call Leds.led0Toggle();
}
该例子程序所要实现的效果是红绿蓝三个灯按自己的循环周期进行闪烁,但由于上面的代码中,for循环了400000次,从而大量占据了CPU,使得led1和led2被阻塞,则最后实现的效果是红灯长亮,绿蓝两个灯无反应。具体的CPU相关参数,可以查询TI公司的msp430说明。
解决阻塞的办法之一是可以使用Task,Task使用post来调用,有些类似于单片机的delay()。post 操作把任务放置到一个以先进先出为处理方式的内部任务队列中去,当一个任务开始执行的时候,只有它运行结束,下一个任务才能开始运行。因此,一个任务不应该占用或阻塞太长时间。例子代码如下:
implementation{
…
task