一、功能:Tossim仿真获取Tinyos程序中某个变量的值
二、核心功能代码BlinkC.nc
#include "Timer.h" module BlinkC @safe() { uses interface Timeras Timer0; uses interface Timer as Timer1; uses interface Timer 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次,那你要怎么做呢? 记住额,是在仿真不改变源代码的时候。