TinyOS 2.x ÈëÃÅ½Ì³Ì - ͼÎÄ ÏÂÔØ±¾ÎÄ

TinyOS Programming

¿ÚµÄÌṩÕß¡£ÒòΪBlinkCÄ£¿éʹÓÃÁËBoot¡¢LedsºÍTimer½Ó¿Ú£¬ËùÒÔ±ØÐëÖ¸Ã÷ÕâЩ½Ó¿Ú¶¼ÊÇÓÉÆäËûÄÄЩ×é¼þÌṩµÄ¡£

ÏÈʹÓÃcomponent¹Ø¼ü×Ö±êÃ÷£¬Õâ¸ö³ÌÐòµ±ÖУ¬×ܹ²ÒªÓõ½Äö×é¼þ¡£ÆäÖаüÀ¨ÎÒÃÇ×Ô¼º±àдµÄBlinkCÄ£¿é¡£»¹ÓиºÔðÌṩBoot½Ó¿ÚµÄMainC×é¼þ£¬¸ºÔðÌṩLeds½Ó¿ÚµÄLedsC×é¼þ¡£»¹ÓÐÌṩTimer½Ó¿ÚµÄTimerMilliC£¬ÆäÊôÓÚ·ºÐÍ£¨generic£©ÅäÖã¬Ö§³Ö±»ÊµÀý»¯¡£ÕâÀïÏȲ»Ï¸Ëµ£¬ÒòΪÎÒÃÇÐèÒªÓõ½Èý¸ö¼ÆÊ±Æ÷£¬ËùÒÔÐèҪʹÓÃnew¹Ø¼ü×Ö´´½¨Èý¸ö¼ÆÊ±Æ÷µÄʵÀý£¬È»ºó·Ö±ðÓÃas±»ÖØÃüÃûΪTimer0¡¢Timer1ºÍTimer2¡£ components new TimerMilliC() as Timer0; components new TimerMilliC() as Timer1; components new TimerMilliC() as Timer2; ÔÙÍùϾÍÊÇ×é¼þÖ®¼äµÄÁ¬½ÓÁË¡£BlinkCʹÓÃÁËBoot½Ó¿Ú£¬¶øMainCÕýºÃÌṩÁËBlinkCËùÐèµÄBoot½Ó¿Ú£¬ËùÒÔÎÒÃǽ«ËûÃǽøÐÐÁ¬½Ó¡£nesCʹÓüýÍ·À´Ö¸Ê¾½Ó¿ÚÖ®¼äµÄ¹ØÏµ¡£Äã¿ÉÒÔ°ÑÏòÓÒ¼ýÍ·£¨?£©µ±×÷¡°°ó¶¨µ½¡±£¨binds to£©¡£¼ýÍ·×ó±ßµÄ½Ó¿Ú°ó¶¨Ò»¸ö½Ó¿Úµ½Óұߵģ¨½Ó¿ÚµÄ£©ÊµÏÖÉÏ¡£»»¾ä»°Ëµ£¬×é¼þʹÓõĽӿÚÔÚ×ó±ß£¬¶øÓÒ±ß×é¼þÌṩµÄ½Ó¿ÚÔÚÓұߡ£ BlinkC->MainC.Boot // »òÕßÏñÏÂÃæÕâÑùÒ²ÊÇ¿ÉÒԵġ£ MainC.Boot<-BlinkC ÒòΪBlinkCÄÚ²¿¾ÍʹÓÃÁËÒ»¸öBoot½Ó¿Ú£¬ËùÒÔBlinkCºóÃæµÄBoot±»Ê¡ÂÔÁË¡£ÍêÕûµÄÊéд¸ñʽΪ£º // ÒâΪ£ºBlink×é¼þÄÚʹÓõÄBoot½Ó¿ÚÓÉMainC×é¼þÌṩ¡£ BlinkC.Boot->Mainc.Boot ½Ó×ÅÊÇ¿ØÖÆ·¢¹â¶þ¼«¹ÜµÄLeds½Ó¿Ú£¬ÓÉLedsC×é¼þÌṩ¡£ÕâÀïÒ²½øÐÐÁ˼òд£¬ÍêÕûµÄÊéд¸ñʽΪ£º BlinkC.Leds->LedsC.Leds ¼ÆÊýÆ÷µÄÁ¬½ÓͬÀí¡£

2.3.2 BlinkCÄ£¿é

BlinkCÄ£¿éµÄ´úÂëÈçÏ£º

#include \

module BlinkC {

uses interface Timer as 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 ); }

Page 14 of 94

TinyOS Programming

event void Timer0.fired() {

dbg(\ call Leds.led0Toggle(); }

event void Timer1.fired() {

dbg(\ call Leds.led1Toggle(); }

event void Timer2.fired() {

dbg(\ call Leds.led2Toggle(); } }

ÔÚÄ£¿éBlinkCµÄÉùÃ÷ÄÚ£¨module BlinkC{?}£©±íÃ÷Á˸óÌÐòÐèÒªÓõ½µÄÈ«²¿½Ó¿Ú¡£ÒòΪ

Blink³ÌÐòÖ÷ÒªÊǽ«telosb½ÚµãÉϵÄÈý¸öLED·¢¹â¶þ¼«¹ÜÒÔ²»Í¬µÄƵÂÊÉÁ˸¡£ËùÒÔÎÒÃÇÐèÒªÈý¸ö¾«¶ÈΪºÁÃ루TMilli£©µÄ¼ÆÊ±Æ÷½Ó¿Ú£¨Timer£©£¬·Ö±ðʹÓùؼü×ÖasÖØÃüÃûΪTimer0¡¢Timer1ºÍTimer2¡£¼ÈÈ»ÐèÒªµãÁÁ·¢¹â¶þ¼«¹Ü£¬×ÔÈ»ÐèÒªÒ»¸ö²Ù¿Ø·¢¹â¶þ¼«¹ÜµÄ½Ó¿Ú£¬Ò²¾ÍÊÇLeds£¬×îºó¾ÍÊdzÌÐòÆô¶¯¸ºÔð³õʼ»¯µÄ½Ó¿ÚBoot¡£½Ó×ÅÔÚʵÏÖ²¿·Ö£¨implementation{?}£©¡£ÔÚʵÏÖ²¿·ÖÐèҪʵÏÖËùÓÐÎÒÃÇÓõ½µÄ½Ó¿ÚµÄʼþ£¬ÒÔΪÔÚÕâ¸ö³ÌÐòÀïÃæ£¬ÎÒÃÇÖ»ÊÇʹÓÃÁ˽ӿڣ¬¶ø×÷ΪÕâЩ½Ó¿ÚµÄÓû§£¬ÎÒÃÇÖ»ÐèÒª¸ºÔðȥʵÏÖËûÃǵÄʼþ¡£ÕâЩ½Ó¿ÚÄÚµÄÃüÁÔòÓɽӿڵÄÌṩÕ߸ºÔðʵÏÖ¡£

ÕâÀïÖ÷ÒªÊÇÁ½¸öʼþ£¬Ò»¸öÊÇBoot½Ó¿ÚµÄbootedʼþ£¬ÁíÒ»¸öÊǼÆÊ±Æ÷±»´¥·¢µÄfiredʼþ¡£ÔÚbootedʼþÖУ¬Ò²¾ÍÊdzÌÐòÆô¶¯ÒÔºó£¬ÎÒÃǵÄÖ÷ÒªÈÎÎñ¾ÍÒ»¸ö£¬Æô¶¯Èý¸ö¼ÆÊ±Æ÷£º event void Boot.booted() { call Timer0.startPeriodic( 250 ); call Timer1.startPeriodic( 500 ); call Timer2.startPeriodic( 1000 ); } Timer 0µÄƵÂÊΪ4Hz£¬Timer 1µÄƵÂÊΪ2Hz£¬Timer 2µÄƵÂÊΪ1Hz¡£ÕâÀïstartPeriodicÊÇÒ»¸öÆô¶¯¼ÆÊ±Æ÷µÄÃüÁºô½ÐÃüÁîÐèҪʹÓÃcall¹Ø¼ü×Ö¡£Í¬Ñù£¬ÒòΪÊÇÃüÁËùÒÔËüÃÇÓɽӿڵÄÌṩÕ߸ºÔðʵÏÖ£¬ÎÒÃÇÖ»¸ºÔðʹÓþͿÉÒÔÁË¡£ÁíÒ»¸öÐèÒªÎÒÃÇ´¦ÀíµÄʼþ¾ÍÊǼÆÊ±Æ÷µÄ´¥·¢£¬ÒòΪÓÐÈý¸ö¼ÆÊ±Æ÷£¬ËùÒÔÐèÒªÊéдÈý¸ö´¥·¢Ê¼þ£º event void Timer0.fired() { dbg(\ call Leds.led0Toggle(); } event void Timer1.fired() { dbg(\ call Leds.led1Toggle(); } event void Timer2.fired()

Page 15 of 94

TinyOS Programming

{ dbg(\ call Leds.led2Toggle(); } ÎÒÃÇ¿ÉÒÔ¿´µ½Timer0±»´¥·¢µÄʱºò£¬ÎÒÃÇÇл»0ºÅ·¢¹â¶þ¼«¹ÜµÄ״̬£¨Èç¹ûÊÇÁÁµÄÔòϨÃð£¬Èç¹ûÊÇÃðµÄÔòµãÁÁ£©£¬Í¬ÀíTimer1±»´¥·¢µÄʱºòÇл»1ºÅ·¢¹â¶þ¼«¹ÜµÄ״̬£¬Timer2±»´¥·¢µÄʱºòÇл»2ºÅ·¢¹â¶þ¼«¹ÜµÄ״̬¡£Led0Toggle¡¢led1ToggleºÍled2ToggleÊôÓÚLeds½Ó¿ÚµÄÈý¸öÃüÁîÓÃcallµÄ·½Ê½µ÷Óü´¿É¡£

2.3.3 ʼþevenstºÍÃüÁîcommands

ÔÚBlinkʾÀýÖÐÓõ½µÄ½Ó¿ÚÎļþΪ£º

? /opt/tinyos-2.x/tos/lib/timer/Timer.nc ? /opt/tinyos-2.x/tos/interfaces/Leds.nc ? /opt/tinyos-2.x/tos/interfaces/Boot.nc

ÒÔLeds½Ó¿ÚΪÀý£¬Ëü¶¨ÒåÁ˶à¸öÃüÁÈ磺redOn()£¬redOff()µÈµÈ£¬Æä×÷ÓÃÊǽ«LEDµÆ

£¨ºì¡¢ÂÌ¡¢»Æ£©µÆ´ò¿ª»ò¹Ø±Õ¡£ÓÉÓÚBlinkCÄ£¿éʹÓÃÁËLeds½Ó¿Ú£¬Òò´ËËü¿ÉÒÔµ÷ÓÃÆäÖеÄÈÎÒâÒ»ÌõÃüÁî¡£µ«Çë×¢Ò⣬Leds½ö½öÖ»ÊÇÒ»¸ö½Ó¿Ú£¬ÆäʵÏÖÓÉʹÓÃËüµÄ×é¼þ¶ÔÓ¦µÄÅäÖÃÎļþÖ¸¶¨¡£ÔÚ±¾ÀýÖУ¬ÊÇÔÚBlinkAppC.ncÖÐÖ¸¶¨ÎªLedsC£¬¼´ÊÇÒªÓÉLedsCÀ´ÊµÏÖLeds½Ó¿Ú¡£ ¼òµ¥µÄµ÷ÓÃʵÏÖ¹ý³ÌÈçÏÂͼËùʾ£º

Page 16 of 94

TinyOS Programming

2.3.4 ±àÒëBlinkÓ¦ÓóÌÐò

TinyOSÖ§³Ö¶àÖÖÆ½Ì¨£¬Ã¿¸öƽ̨ÔÚtos/platformĿ¼ÏÂÓÐ×Ô¼ºµÄĿ¼¡£ÔÚ±¾½Ì³ÌÖУ¬ÎÒÃǽ«ÊÊÓÃtelosbƽ̨×÷ΪÀý×Ó¡£ÒªÎªtelosb½Úµã±àÒëBlinkÓ¦ÓóÌÐò£¬Ö»ÐèÔÚcygwin shell ÖÐתµ½apps/BlinkĿ¼Ï£¬ÊäÈ룺

make telosb

¼´¿É¡£Èç¹ûûÓÐÈκÎÓï·¨´íÎó£¬Äú½«¿´µ½ÒÔÏÂͼ 2.1±àÒëÐÅÏ¢£º

ͼ 2.6 ³É¹¦ÎªTelosb½Úµã±àÒë³ÌÐò

¹ØÓÚ±àÒë·½ÃæµÄ¸ü¶àÐÅÏ¢²»ÔÚ±¾½Ì³ÌÖ®ÄÚ£¬Ä¿Ç°Ò²Ö»ÐèÖªµÀÕâЩ¡£ÓÐÐËȤµÄ¶ÁÕß¿ÉÒÔ×Ô¼º·­ÔÄÏà¹Ø×ÊÁÏ¡£

2.3.5 °²×°Blink³ÌÐòµ½Telosb½Úµã²¢ÔËÐÐ

Òª°²×°Blink³ÌÐòµ½Telosb½Úµã£¬ÏȽ«telosb½Úµã²åÈëPCµÄUSB½Ó¿ÚÖУ¬ÔÚ֮ǰÒѱàÒëµÄ»ù´¡ÉÏ£¬ÄúÖ»ÐèÒªÔÚapps/BlinkĿ¼ÏÂÊäÈ룺 make telosb reinstall

make install, bsl,

¼´¿É£¬Èç¹û³É¹¦µÄ»°¿ÉÒÔ¿´µ½ÒÔÏÂͼ 2.2°²×°ÐÅÏ¢£º

Page 17 of 94