Tossim仿真Blink 02 获取变量值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 [email protected] %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次,那你要怎么做呢? 记住额,是在仿真不改变源代码的时候。

    

以上是关于Tossim仿真Blink 02 获取变量值的主要内容,如果未能解决你的问题,请参考以下文章

如何在javascript变量中获取变量值后面的C#代码?

PHP三元速记运算符中使用isset()时获取变量值

在 GMAIL API Get Calls 中传递变量值

matlab 如何保留变量值

如何在 pyspark 数据框中将变量值分配为新列值?

如何从其他页面获取变量值?