`

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安装说明

    通过以上步骤,用户可在Windows环境下成功安装TinyOS 2.0,同时保留原有的TinyOS 1.x版本。本指南为作者个人经验和官方文档的结合产物,如有不足之处,欢迎指正。对于TinyOS的学习者和爱好者来说,这份指南将有助于...

    linux下安装tinyos 2.0

    在Linux操作系统中安装TinyOS 2.0是一个相对复杂的过程,因为这个开源操作系统主要用于物联网设备和传感器网络,其依赖于特定的开发工具和库。以下是在Fedora Core 8上安装TinyOS 2.0的详细步骤: 首先,你需要安装...

    安装tinyos2.0的心得

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

    TinyOS_2.0传输机制

    1. **消息包传输机制**:TinyOS 2.0采用消息驱动的方式进行通信。每个消息都包含一个类型标识符和一组参数。这种机制不仅简化了编程模型,还提高了系统的可扩展性和可靠性。 2. **TinyOS框架**:TinyOS 2.0采用了...

    TinyOS 2.0 Tutorials-new.pdf

    TinyOS程序通过ncc编译器进行编译,编译后的应用程序可以被烧录到支持TinyOS的硬件上,即mote(传感器节点)。 TinyOS的执行模型包括了事件(events)、命令(commands)和任务(tasks)。事件是异步操作的结果,...

    tinyos tutorials学习小结

    1. **基本组件使用**:学习如何使用常见的TinyOS组件,如`Counter`(计数器)、`Timer`(定时器)和`AM`(应用消息)模块。了解它们的工作原理和如何在代码中集成这些组件。 2. **网络通信**:理解TinyOS中的网络层...

    Ubuntu安装TinyOS密码tinyos

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

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

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

    tinyos 自学笔记

    TinyOS自学笔记主要关注的是nesC语言,这是一种针对传感器网络节点设计的编程语言,特别适用于资源有限的环境。nesC是C语言的一种扩展,其设计原则和执行模型都是为了体现TinyOS操作系统的核心特性。 1. **结构和...

    tinyOS内核分析

    ### TinyOS内核分析 #### 1. 综述 TinyOS是一款专为无线传感器网络设计的操作系统,其内核采用非抢占式设计,这意味着它依赖于任务的主动放弃CPU控制权来完成任务间的切换。这种设计使得TinyOS能够更好地支持资源...

    TinyOS程序实验代码讲解

    综上所述,TinyOS在Moteworks2.0平台下的实验代码不仅展示了定时器、LED控制、数据采集和无线通信等基础功能,还深入探讨了TinyOS中组件、接口及配置的核心概念,为理解和开发无线传感器网络应用提供了宝贵的实践...

    TinyOS学习笔记

    TinyOS是一种专为微型传感器网络设计的操作系统,它采用了组件化的编程模型,使得开发者能够构建可靠的、低功耗的嵌入式网络系统。TinyOS的核心编程语言是nesC,这是一门基于C语言的语法,但增加了对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编程语言:NesC - **NesC简介**:NesC是TinyOS使用的编程语言,它是基于C语言的一种...

    tinyos学习历程

    1. TinyOS 早期版本简单学习(0.6 C 语言):了解早期的TinyOS版本有助于理解它的演进过程,以及nesc如何改进了开发体验。 2. TinyOS 子目录 MAP:主要包括tos目录,其中包含了系统的内核、应用层组件、库和工具等...

    6lowpan-tinyos

    1. TinyOS介绍:TinyOS 是一种为无线传感器网络设计的操作系统,广泛应用于低功耗无线通信领域。它支持模块化编程,使用nesC编程语言进行编程。TinyOS 具有高度模块化、轻量级等特点,非常适合运行于资源受限的...

    tinyos.sh文件

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

    tinyos-2.1.2

    TinyOS是专为物联网(IoT)环境设计的开源微操作系统,特别...通过"tinyos-release-release_tinyos_2_1_2"这样的发布包,开发者可以获得完整的TinyOS环境,进一步探索和利用这个强大的操作系统来构建创新的IoT解决方案。

Global site tag (gtag.js) - Google Analytics