Tossim仿真Blink 02 获取变量值

一、功能:Tossim仿真获取Tinyos程序中某个变量的值

二、核心功能代码BlinkC.nc

    

#include "Timer.h"

module BlinkC @safe()
{
  uses interface Timer<TMilli> as Timer0;
  uses interface Timer<TMilli> as Timer1;
  uses interface Timer<TMilli> as Timer2;
  uses interface Leds;
  uses interface Boot;
}
implementation
{
  uint16_t counter = 0;
  event void Boot.booted()
  {
    //call Timer0.startPeriodic( 250 );
    //call Timer1.startPeriodic( 500 );
    call Timer2.startPeriodic( 1000 );
    //dbg("BlinkC","Application booted\r\n");
    //  dbg("BlinkC,BlinkC1","Application booted@ %s.\r\n",sim_time_string());
    // dbg("BlinkC1","booted Application @ %s.\r\n",sim_time_string());
  }

  event void Timer0.fired()
  {
    //dbg("BlinkC", "Timer 0 fired @ %s.\n", sim_time_string());
    call Leds.led0Toggle();
  }
  
  event void Timer1.fired()
  {
    //dbg("BlinkC", "Timer 1 fired @ %s \n", sim_time_string());
    call Leds.led1Toggle();
  }
  
  event void Timer2.fired()
  {
    counter++;
    dbg("BlinkC", "Timer 2 fired @ %s  counter=%u.\n", sim_time_string(),counter);    //显示Timer2触发事件并显示counter值    
    call Leds.led2Toggle();
  }
}

三、

  1、进入Blink 所在目录  “cd xxx/Blink”

  2、生成仿真框架,为后续的仿真做准备,   就像生成一个界面,等着你输入(命令或脚本)来交互  "make micaz sim"  目前仿真只支持micaz平台, 后面的"sim"代表生成仿真框架

  3、编辑simulation1.py

      

#!/usr/bin/env python
#-*-coding:utf-8-*-            #解决编码问题

from tinyos.tossim.TossimApp import *
from TOSSIM import *            #导入TOSSIM仿真器
import sys


n=NescApp()                #相当于BlinkC程序对象吧
t=Tossim(n.variables.variables())    #获得一个带参数列表Tossim对象
m=t.getNode(35);            #创建一个ID为35的节点对象
v=m.getVariable("BlinkC.counter")    #获取BlinkC中的counter变量
m.bootAtTime(45654)            #在45654时间点(Simulation Tick)启动节点
f=open("log.txt",'w');
t.addChannel("BlinkC",sys.stdout)    #将Blink输出通道绑定到sys.stdout
t.addChannel("BlinkC",f)        #将Blink输出通道绑定到文件
'''        
for i in range (0,100):
     t.runNextEvent()        #运行下一个事件
'''
while(v.getData()<10):            #获得counter值,    
    t.runNextEvent()
    print(v.getData())

  4、运行simulation1.py  仿真程序:

    

  5、小结:

      你可能会想,获取变量值,那他妈还不简单,直接dbg就可以了,就像上面程序代码所写的,但是,你可曾想过,如果你想要Timer2只触发10次,那你要怎么做呢? 记住额,是在仿真不改变源代码的时候。

    

posted @ 2017-10-31 22:39  XiaoBBai  阅读(483)  评论(1编辑  收藏  举报