TinyOS 同步与异步处理学习心得

本文探讨了TinyOS中同步处理可能导致的问题,例如长时间占用CPU导致其他任务阻塞。通过举例展示了如何使用Task和split-phase操作来解决这个问题,以避免任务阻塞并确保系统的高效运行。
摘要由CSDN通过智能技术生成

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值