TinyOS Programming
ͼ1.12 Ñ¡ÔñÄúµÄÇý¶¯³ÌÐò
È»ºó £¬Ñ¡ÔñÇý¶¯³ÌÐòËùÔÚÎļþ£¬ÀýÈ磺ÔÚ±ÊÕߵĵçÄÔÖУ¬Îļþ¼ÐÈçͼ1.12Ëùʾ£¬µã»÷ ¡°OK¡±£¬È»ºóµã»÷ ¡°Next¡±¡£½ô½Ó×ÅWindows°²×°¸ÃÇý¶¯³ÌÐò£¬°²×°Íê³Éºó¾Í°Ñ Telob ±ä³ÉÒ»¸öUSB ´®¿ÚÉ豸¡£´ËʱÄú¿ÉÒÔ¼ì²éÉ豸¹ÜÀíÆ÷¶Ë¿Ú£¬¿´ÊÇ·ñÓÐ USB Serial Port Õâ¸öÉ豸£¬Èç¹ûûÓпÉÒÔÖØÊÔ¼¸´Î¡£
Page 6 of 94
TinyOS Programming
µÚ2Õ TinyOS¼ò½é
TinyOS×÷ΪÎÞÏß´«¸ÐÆ÷ÍøÂçÖбȽÏÁ÷ÐеIJÙ×÷ϵͳ£¬Ö§³ÖĿǰ³öÏֵĶàÖֽڵ㡣¾Í2.x°æ±¾¶øÑÔ£¬Ö§³ÖmicaϵÁС¢telosϵÁеȽڵ㡣TinyOS×÷Ϊ¿ªÔ´µÄ²Ù×÷ϵͳ£¬Æä¼ÛÖµ²»µ¥ÎªÖ§³Ö¶à¸öϵÁеĽڵ㣬¶Ôµ¥Æ¬»ú°®ºÃÕß¶øÑÔ£¬¸üÊÇѧϰ¶àÖÖµ¥Æ¬»ú±à³ÌµÄÉϼÑ×ÊÁÏ£»¶Ô²Ù×÷ϵͳ°®ºÃÕß¶øÑÔÒ²ÓÐÒ»¶¨²Î¿¼¼ÛÖµ£¬Æä¼òµ¥ÐÔÈöÁÕ߸ü¼ÓÈÝÒ×ÈëÃÅ¡£
±¾Õ¼òµ¥½éÉÜTinyOSµÄ»ù±¾¸ÅÄîºÍÆä±àдÓïÑÔ£ºnesC¡£°üÀ¨nesCÓïÑÔµÄһЩ¸ÅÄîºÍÓï·¨£¬ÈöÁÕßÄܹ»ÔÚÕâ¸ö»·¾³Ï±àд×Ô¼ºµÄÓ¦ÓóÌÐò¡£×îºó½áºÏTinyOS×Ô´øµÄÒ»¸öÀý×Ó£ºBlink£¬Èôó¼ÒÔÚ´ËÀý×ÓÖÐÊìÏ¤Éæ¼°µ½µÄ¸ÅÄî¡£ÔÚ´ËÔÙ´ÎÃ÷È·Ö¸³ö£¬Îª·½±ã¶ÁÕßÅóÓÑ£¬±¾½Ì³Ì¾¡¿ÉÄÜʹÓÃTinyOS×Ô´øµÄÀý³Ì¼°Ô´´úÂë¡£ÁíÍ⣬±¾ÕÂÔÚ½²½âTinyOS¡¢nesCÓïÑÔÏà¹Ø¸ÅÄîʱÒýÓÃÁËTinyOS¹Ù·½¹«²¼µÄ½²½â·½Ê½¼°ÄÚÈÝ¡£
2.1 nesCÓïÑÔ¼ò½é
TinyOS²Ù×÷ϵͳ¡¢¿â¡¢¼°ÆäÓ¦ÓóÌÐò¶¼ÊÇÓÃnesCÓïÑÔ±àдµÄ¡£TinyOSÊÇÒ»ÖÖÃæÏò´«¸ÐÆ÷ÍøÂçµÄÐÂÐͲÙ×÷ϵͳ£¬Ëü×î³õÊÇÓûã±àºÍCÓïÑÔ±àдµÄ¡£µ«ÔÚÓ¦Óùý³ÌÖУ¬·¢ÏÖCÓïÑÔ²»ÄÜÓÐЧ·½±ãµØÖ§³ÖÃæÏò´«¸ÐÆ÷ÍøÂçµÄÓ¦ÓúͲÙ×÷ϵͳµÄ¿ª·¢£¬Ïà¹Ø¹¤×÷ÈËԱΪ´Ë¶ÔCÓïÑÔ½øÐÐÁËÒ»¶¨µÄÀ©Õ¹£¬¿ª·¢³önesCÓïÑÔ¡£nesC²»µ«Ö§³ÖTinyOSµÄ²¢·¢Ä£ÐÍ£¬»¹Í¬Ê±¾ßÓнṹ»¯»úÖÆ£¬ÃüÃû»úÖÆ£¬Äܹ»¸úÆäËüÈí¼þ×é¼þÁ¬½Ó³ÉÒ»¸ö½¡×³µÄÍøÂçǶÈëʽϵͳ¡£ÆäÖ÷ҪĿ±êÊÇÈÃÓ¦ÓóÌÐò¿ª·¢ÈËÔ±Äܹ»·½±ãµØ½¨Á¢ÆðÍêÕûµÄ¡¢²¢·¢Ê½ÏµÍ³µÄ×é¼þ£¬²¢¿ÉÒÔÔÚ±àÒëʱ×÷³öÈ«ÃæµÄ¼ì²é¡£
TinyOS¶¨ÒåÁ˺ܶàµÄÖØÒªµÄ¸ÅÄÕâЩ¸ÅÄî¶¼ÌåÏÖÔÚnesCÓïÑÔÉÏÁË¡£µÚÒ»£¬nesCÓ¦ÓóÌÐò¶¼ÊÇÓÉ×é¼þ×é³ÉµÄ£¬ÕâЩ×é¼þÖ®¼äµÄÁ¬½ÓÊÇͨ¹ý¶¨ÒåÁ¼ºÃµÄ¡¢¾ßÓÐË«ÏòÐÔÖʵĽӿڡ£µÚ¶þ£¬nesC¶¨ÒåÁ˲¢·¢Ä£ÐÍ£¬´ËÄ£ÐÍÊÇ»ùÓÚÈÎÎñ (task) ºÍÓ²¼þʼþ¾ä±ú (hadware event handler)£¬²¢ÇÒÔÚ±àÒëÆÚ¼ä¿ÉÒÔ½øÐÐÊý¾Ý¾ºÕù¼ì²â (data race)¡£
nesC½¨Á¢ÔÚCÓïÑԵĻù´¡ÉÏ£¬ÆäÏÔÖøÓëCÓïÑÔ²»Í¬µÄ¸ÅÄîÓÐÈçÏÂÄÚÈÝ¡£
2.1.1 ×é¼þ(components) £¨1£©»ù±¾¸ÅÄî
ÈκÎÒ»¸öʹÓÃnesC±àдµÄÓ¦ÓóÌÐò¶¼ÊÇÓÉÒ»¸ö»ò¶à¸ö×é¼þÁ¬½Ó¶ø³É£¬´Ó¶ø³ÉΪһ¸ö¿ÉÖ´Ðеġ¢ÍêÕûµÄ³ÌÐò¡£ÔÚnesCÖУ¬×é¼þµÄÀàÐÍÓÐÁ½ÖÖ£ºÄ£¿é (module) ºÍÅä¼þ (configuration)¡£Ä£¿éÖ÷ÒªÓÃÀ´ÌṩӦÓóÌÐòµÄ´úÂ룬ÒÔʵÏÖÒ»¸ö»ò¶à¸ö½Ó¿Ú¡£¶øÅä¼þÔòÊÇÓÃÀ´»ã¾ÛÆäËü×é¼þ£¬Á¬½Ó½Ó¿ÚµÄʹÓÃÕߺÍÌṩÕß¡£nesCÉè¼ÆÕß³ÆÕâÖÖ¹ØÏµÎªÁ¬½Ó (wiring)¡£Ã¿¸önesCÓ¦ÓóÌÐò¾ùÊÇÓÉÒ»¸ö¶¥²ãµÄÅä¼þ(top-level configuration)ËùÃèÊö£¬ÆäÄÚÈݾÍÊǰÑÓ¦ÓóÌÐòÓõ½µÄËùÓÐ×é¼þ¶¼Á¬½ÓÆðÀ´£¬´Ó¶øÐγÉÒ»¸öÕûÌå¡£
nesCµÄÔ´Îļþ£º½Ó¿Ú¡¢Ä£¿é¡¢ºÍÅä¼þµÄÀ©Õ¹ÃûÊÇ ¡°.nc¡±¡£¹ØÓÚÃüÃûÔ¼¶¨µÄ¸ü¶àµÄÐÅÏ¢Çë²é¿´http://www.tinyos.net/tinyos-2.x/doc/tutorial/naming.html£¬Ò²¿ÉÒԲο´±¾½Ì³ÌµÄ¸½Â¼¶þ£º¡¶TinyOSÃüÃûÔ¼¶¨¡·¡£
×é¼þµÄ¶¨Òå¸ñʽÈçͼ2.1Ëùʾ£º
Page 7 of 94
TinyOS Programming
ͼ2.1 ×é¼þµÄÔÐÍ
Ò»¸ö×é¼þÌṩ£¨provides£©ºÍʹÓÃ(uses)½Ó¿Ú¡£½Ó¿ÚÊÇ·ÃÎÊ×é¼þµÄΨһ;¾¶£¬²¢ÇÒ½Ó¿ÚÊǾßÓÐË«ÏòÐԵġ£Ò»¸ö½Ó¿ÚÉùÃ÷ÁËһϵÁгÆÖ®ÎªÃüÁî (command) µÄº¯Êý£¬¼°Ò»ÏµÁгÆÖ®ÎªÊ¼þ (event) µÄº¯Êý£¬½Ó¿ÚµÄÌṩÕß±ØÐëʵÏָýӿÚÉùÃ÷µÄËùÓеÄÃüÁ¶ø½Ó¿ÚµÄʹÓÃÕßÔò±ØÐëʵÏָýӿÚÉùÃ÷µÄËùÓеÄʼþ¡£Ò»¸ö×é¼þ¿ÉÒÔÌṩ»òʹÓöà¸ö½Ó¿Ú£¬²¢ÇÒ¿ÉÒÔÌṩ»òʹÓÃͬһ¸ö½Ó¿ÚµÄ¶à¸öʵÀý¡£
£¨2£©»ùÓÚ×é¼þµÄÄ£ÐÍ
Ò»¸ö¼òµ¥µÄ»ùÓÚ×é¼þµÄµ÷ÓÃÄ£ÐÍÈçͼ2.2Ëùʾ¡£
Page 8 of 94
TinyOS Programming
ͼ2.2 »ùÓÚ×é¼þµÄÄ£ÐÍ
ÉϲãµÄÓ¦Óõ÷ÓÃTinyOSËùÌṩµÄ²»Í¬×é¼þ£¬¶øÃ¿¸ö×é¼þ¶¼»áÏàÓ¦µÄÌṩ×ÔÉíµÄÓ¦Óýӿڡ£Êµ¼ÊÉϸ÷¸ö×é¼þµÄʵÏÖ»¹ÐèÒªµ÷ÓÃÆäϲãµÄͼÖÐËùʾµÄÄ£ÐÍÀàËÆÓÚÒ»¸ö¿â(library)£¬²»Í¬µÄ×é¼þ(components)Ï൱ÓÚ¿âÖеÄÔªËØ(objects)£¬¶ø½Ó¿Ú(interfaces)Ï൱ÓÚAPIs¡£
£¨3£©¼òµ¥Ê¾ÀýBlink
BlinkʾÀýµÄÖ÷ÒªÏÖÏóΪͨ¹ý¶ÔTimerµÄµ÷Óô¥·¢ºì¡¢ÂÌ¡¢»ÆÈýÖÖÑÕÉ«µÄµÆµÄÉÁ˸ʼþ£º
? Toggle Red LED @ 0.25 Hz ? Toggle Green LED @ 0.25 Hz ? Toggle Yellow LED @ 0.25 Hz
ÈçÓÒͼËùʾ£¬ÔÚBlinkʾÀýÖÐÖ»ÐèÒªÓà µ½ÒÔÏÂÈý¸ö×é¼þ£º
? LEDs ? Timer ? Main
1¡¢ ½Ó¿Ú
²»Í¬µÄ×é¼þÌṩ×ÔÉíÏàÓ¦µÄ½Ó¿Ú£¬Ó¦ÓóÌÐòÔòͨ¹ýµ÷ÓÃÕâЩ½Ó¿ÚÀ´ÊµÏÖ¶ÔÓÚ¸üµÍ²ãµÄ×é¼þºÍÓ²¼þµÄµ÷Óá£ÀýÈçÔÚ±¾ÀýÖеÄÈçÏ´úÂ룺 {
uses interface Timer
and you implement what you want to do in your program {
µ±Timer±»´¥·¢µÄʱºò£¬Ëù¶ÔÓ¦µÄµÆÉÁ˸; }
Page 9 of 94