`

Tinyos 2.0 笔记小结(1)

J# 
阅读更多

1. configure组件注意事项

 

一般在configure的配置中很少用到 uses interface (外部规格元素)。 常见的都是定义provides interface, 然后用“=”与相关的provider想关联(配线)。但如果定义了uses interface, 也同样需要用“=”与相关的user(内部)或provider(外部)想关联(配线)。

 

因为nesC 有三种配线陈述:

  • endpoint1=endpoint2:( 赋值配线) 任何连接包括一外部规格元素。这些有效地使两规格元素相等。设S1是endpoint1的规格要素,S2是endpoint2的规格要素。下面两个条件之一必须满足,否则就会产生编译时间错误:
        – S1 是内部的, S2 是外部的 (反之亦然) ,并且 S1 和 S2都是被提供或都是被使用
        – S1 和 S2 都是外部的,而且一个被提供,而另一个被使用.
  • endpoint1->endpoint2:( 联编配线) 一个连接包括二种内在的规格元素。.联编配线总是连结一由endpoint1指定的使用规格元素到一endpoint2指定的提供规格元素。如果这两个条件不能满足, 就会发生编译-时间错误.。
  • endpoint1<- endpoint2 与endpoint2 -> endpoint1是等价的。

 

2. 定义函数变量的要点

函数中定义局部成员变量,学要放在所有逻辑表达式的前面(即函数最前面,或局部代码的前面)。 否则会出现编译错误“syntax error”

 

 例如

void fun(){
        int i;
        uint8_t num;
        
        i=0;
        if(i!=0){
                //do some
        }
        
         int j; //会导致编译错误
         j=0;
}

 

修正这个错误可以通过把int j 移到函数的开头,或者

void fun(){
        int i;
        uint8_t num;
        
        i=0;
        if(i!=0){
                //do some
        }
        
         {
          int j; //会导致编译错误
         j=0;
         }
}

 

3.  Split-Phase注意事项

 

调用split-phase操作时注意防止‘死锁’

 

比如AMSend.send(...), 一般会用一个flag busySendif(busySend) 来防止冲突。

 

if(busySend)
    postTask();
else{
    busySend=TRUE;
    call AMSend.send(...);
}

...

event void AMSend.sendDone(...) {
    busySend=FALSE;
}
 

 

但是这样做有个问题, 就是如果send()调用失败的发返回FAILED的话就不会再激活event sendDone, 这样busySend将永远无法设回FALSE而导致死锁。 解决方法把上面的代码改为:

 

if(busySend)
    postTask();
else{
    if(call AMSend.send(...) == SUCCESS)
        busySend=TRUE;
}

 

 在成功执行send(成功占用资源)后在加锁。

 

 

4. Serial监听时出现 bad packet, packet too long等错误

试着调低serial的speed, 比如从115200改为57600。

 

 

 

 

分享到:
评论

相关推荐

    tinyos2.0安装说明

    作者参照http://www.tinyos.net上的说明和自己安装时出现的问题,总结成此说明。此说明叙述怎样在windows下保留tinyos-1.x并安装tinyos2.0的过程,仅供学习和爱好tinyos的朋友参考

    linux下安装tinyos 2.0

    linux操作系统如何安装tinyos 2.0

    TinyOS 2.0 for CrossBow TelosB 安装指南

    TinyOS 2.0 for CrossBow TelosB 安装指南

    安装tinyos2.0的心得

    给出了tinyos2.0安装的具体步骤,对于初学者来说很有帮助

    TinyOS 2.0 Tutorials-new.pdf

    TinyOS 2.0 Tutorials These brief tutorials are intended to get you started with TinyOS. They show you the basics of writing, compiling, and installing TinyOS applications. They introduce the basic ...

    Ubuntu安装TinyOS密码tinyos

    本PDF密码为tinyos,在资料中详细讲解了TinyOS2.0以上版本在Ubuntu上的安装与测试,更关键的是安装中遇到的问题都有详细的解决方式。

    tinyos tutorials学习小结

    在网上看到的前人学习tinyos tutorial的学习总结,跟大家分享一下

    无线传感器网络操作系统TinyOS 2.x中文版(1)

    无线传感器网络操作系统TinyOS 2.x中文版(1),包含tinyos官方wiki的tutorial和TEP

    TinyOS_2.0传输机制

    TinyOS_2.0的传输机制,欢迎大家下载。

    TinyOS学习笔记

    这篇文档是学习TinyOS过程中的笔记,是了解TinyOS的比较好的中文参考

    Small RTOS51 tiny os with sem&signal&Mbox Ver 2.0

    1、在TinyOS51系统中_task_关键依然有效,0号任务依然是最高优先级的任务,1号任务次之,依次类推。2、。同时TinyOS51系统弥补了RTX51—Tiny的缺点。首先TinyOS51系统采用占先式任务调度,这样可以最大限度保证系统...

    tinyOS内核分析

    本文档从中间代码入手对 TinyOS 内核进行了简要分析,对于那些接触tinyOS 的人来说,这些是必须的,也是基础性的东西。

    tinyos.sh文件

    tinyos.sh文件,在linux环境下生成,cygwin环境下可用,tinyos.sh文件总出问题的可以下载,将绝对路径修改成自己的

    tinyos51 for 51 操作系统

    1、在TinyOS51系统中_task_关键依然有效,0号任务依然是最高优先级的任务,1号任务次之,依次类推。2、。同时TinyOS51系统弥补了RTX51—Tiny的缺点。首先TinyOS51系统采用占先式任务调度,这样可以最大限度保证系统...

    tinyos-release-tinyos-2_1_2.tar.gz

    根据tinyos官方网站上下载的tinyos2.1.2版本的发行包,其链接是:http://github.com/tinyos/tinyos-release/archive/tinyos-2_1_2.tar.gz

    Header only C++11 tiny glTF 2.0 library.zip

    Header only C++11 tiny glTF 2.0 library

    tinyos中文手册

    TinyOS是UC Berkeley(加州大学伯克利分校)开发的开放源代码操作系统,专为嵌入式无线传感网络设计,操作系统基于构件(component-based)的架构使得快速的更新成为可能,而这又减小了受传感网络存储器限制的代码...

    TinyOS入门手册

    TinyOS入门手册 入门手册 TinyOS TinyOS入门手册

    uabantu下安装TinyOS需要的软件包

    2015/11/04 00:49 1,065,420 deputy-tinyos_1.1-20080807_i386.deb 2015/11/04 00:49 15,897,470 msp430-binutils-tinyos_2.17-20080806_i386.deb 2015/11/04 00:49 4,766,946 msp430-gcc-tinyos_3.2.3-20080806_...

    tinyos-ubuntu16.04安装tinyos2.1.2.txt

    tinyos-ubuntu16.04安装tinyos2.1.2

Global site tag (gtag.js) - Google Analytics