📄 testwdtc.nc
字号:
module TestWDTC { uses interface Boot; uses interface Leds; uses interface Timer<TMilli> as Timer; //uses interface StdControl as TimerControl; //uses interface HPLWdtC; uses interface StdControl as WDTControl; uses interface WDT;}implementation { enum { mode = WDTTEST, }; uint8_t firstTime; event void Boot.booted() { firstTime = 1; call WDTControl.start(); call Leds.led0On();//red on call Leds.led1On();//green on if (mode == 1 || mode ==2) { call Timer.startPeriodic(3000); } if(mode == 0) { call Timer.startPeriodic(3000);//HW WDT is 1S, it's better start Timer at periodic >1000ms @lzm } } task void crashMote()//和变量一样,task也要先声明定义再使用 @lzm { call Leds.led2On(); while (1) { cli(); WDTCSR |= (1<<WDE) | (0<<WDIE); wdt_enable(0); while (1) { __asm__ __volatile__("nop" "\n\t" ::); } //仅cli,wdtcsr,__asm,:亮,灭 //仅wdt_enable,:亮,不灭 //全部,:闪,灭,不能重启 //mica2,注释while时led2亮,2s后灭;不注释时马上就灭,可见不注释时在mica和imote上的动作一样,但是可以重启。 } } event void Timer.fired() { call Leds.led1Toggle();//green Toggle //call WDT.start(5000); if (firstTime) { firstTime = 0; call WDT.start(1000); } else { call WDT.reset(); } if (mode == 2) { post crashMote(); } //call WDTControl.stop(); }//mode0:节点启动,led0,1点亮,timer周期3s,timer fired时led1toggle,WDT设为5s,//mode1: 节点启动,led0,1点亮,timer 7s后启动一次,led1toggle,再过5s节点reset,//mode2: 节点启动,led0,1点亮,timer周期3s,timer fired时led1toggle,crashmote, led2点亮,5s后节点reset//timer > WDT的情况}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -