tinyos中的signal和event
来源:互联网 发布:男生百搭衣服 知乎 编辑:程序博客网 时间:2024/06/08 04:37
在基于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:以上内容为自己推测,并没有基于具体的源代码分析,所以仅供参考。
阻塞作业:
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:以上内容为自己推测,并没有基于具体的源代码分析,所以仅供参考。
- tinyos中的signal和event
- tinyos:event & ADC
- tinyos中的Java 和cygwin问题
- QT中的SIGNAL和SLOT
- Qt中的SIGNAL和SLOT
- EA&UML日拱一卒-活动图::Signal,Event和Trigger
- event(condition variable signal)
- TinyOS中的safe语句
- C#中的delegate和event
- C#中的delegate和event
- C#中的delegate和event
- C#中的delegate和event
- C#中的delegate和event
- C#中的delegate和event
- C#中的Delegate和Event
- C#中的delegate和event
- C#中的delegate和event
- C#中的delegate和event
- ImageView frameAnimation开始执行动画
- Spring注解入门
- 武汉科技大学计算机学院菜鸟杯:人见人爱A+B.(杭电2033)
- strust namespace
- TI DSP的EMIF接口的地址总线问题(实际测试)
- tinyos中的signal和event
- MySQL SQL性能优化笔记
- symfony sfCaptchaGDPlugin 插件的使用方法及注意事项 sf1.4
- Ajax实现评论的顶和踩功能
- 武汉科技大学计算机学院菜鸟杯:分拆素数和.(杭电2098)
- 先安装SQL2008 R2后安装AD导致无法正常登陆数据库(无法启动MSSQLSERVER)
- Linux虚拟化: 探索 Linux 内核虚拟机 学习 KVM 架构及其优点
- 获取键盘和鼠标处于空闲状态的时间
- 数字转换大写人民币