tinyos中的signal和event

       在基于tinyos程序设计中,signal和event语句很常见。这两个关键字主要是为了实现分阶段作业的目的。和分阶段作业对应的是阻塞作业,下面举例子说明:
阻塞作业:
if(send()==SUCESS){
    sendCount++;
}

分阶段作业:
//调用阶段
send();
//完成阶段
void sendDone(error_t err){
    if(err==SUCESS){
        SendCount++;
    }
}

       分阶段调用的一个好处是,当send()操作发出后,系统无需等待,可以转而执行其他的任务(task),这样使得系统资源得以有效的利用,但假设send()函数中的具体实现为:
send(){
    int i;
    for(i=0;i++;i<10000);
}

       这样当send()操作发出后,系统必须执行send()中的内容,系统处于忙碌状态。这时候分阶段作业和阻塞作业是基本没有区别的;如果假设send()函数的具体实现是:
send(){
    //DMA控制设置
}

       这样当DMA控制命令设置结束后,系统便处于空闲状态,DMA控制器自主完成数据搬移,等到数据搬移结束后,DMA控制器通过中断通知控制器,进而完成sendDone()指令。在这种情况下,分阶段作业确实比阻塞作业有很大优势。
       总结一下:基于signal、event关键字的分阶段作业模式主要针对于独立于控制器处理的任务,在执行该任务是不需要控制器直接参与,这样控制器只需要做短暂的任务分配或相关配置,然后进入空闲状态,从而可以处理其他任务;如果用分阶段模式来处理像数据计算这样一直需要控制器全程参与的任务,分阶段作业和阻塞作业效果基本一致。


ps:以上内容为自己推测,并没有基于具体的源代码分析,所以仅供参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值