一、功能:如题,使用TinyOS自带的仿真器仿真Blink程序
二、Blink逻辑实现代码
#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 { 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() { dbg("BlinkC", "Timer 2 fired @ %s.\n", sim_time_string()); call Leds.led2Toggle(); } }
三、步骤:
1、进入Blink 所在目录 “cd xxx/Blink”
2、生成仿真框架,为后续的仿真做准备, 就像生成一个界面,等着你输入(命令或脚本)来交互 "make micaz sim" 目前仿真只支持micaz平台, 后面的"sim"代表生成仿真框架
3、编辑脚本文件simulation.py,代码如下:
#!/usr/bin/env python #-*-coding:utf-8-*- #解决编码问题 from TOSSIM import * #导入TOSSIM仿真器 import sys t=Tossim([]) #获得一个Tossim对象 m=t.getNode(35); #创建一个ID为35的节点对象 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() #运行下一个事件
4、运行simulation.py,进行仿真
你可以打开Blink/log.txt 文件,可以看到文件内容和上面图片内容相同
5、小结:
1)或许你会很奇怪,
for i in range (0,100): t.runNextEvent() #运行下一个事件
明明我运行了100个事件,怎么Timer0没有触发100-1次呢?其实这里面还有很多其他事件执行了,只是我们没有dbg而已
2)从上图可以看到Timer0每执行4次,Timer1执行2次,Timer2执行一次,这与我们的设计相同