TinyOS 2.x ÈëÃÅ½Ì³Ì - ͼÎÄ

TinyOS Programming

ÓÉDemoSensorCµÄÅä¼þ¿ÉÖª£¬DemoSensorCÌṩµÄRead½Ó¿ÚÊÇʵ¼ÊÉÏÓÉVoltageC()ÌṩµÄ£¬¼´µçѹ´«¸ÐÆ÷¡£

VoltageC.nc

generic configuration VoltageC() { provides interface Read; }

implementation {

components new Msp430InternalVoltageC(); Read = Msp430InternalVoltageC.Read; }

ÔÚtelosbƽ̨£¬Òò´ËVoltageC()×é¼þµ÷ÓõÄÊÇMsp430InternalVoltageC×é¼þÌṩµÄRead½Ó¿Ú¡£

ÏÂÃæÎÒÃÇÏòϸüÉî²ã´ÎµÄ·ÖÎö£¬Õâ¾ÍÖ±½ÓºÍÓ²¼þÏà¹ØÁË¡£ 4.2 ADC

ÏÂͼΪMSP4301611оƬµÄÄÚ²¿½á¹¹£¬×ó²àΪ16·ADCÊäÈëͨµÀ£¬A0-A7Ϊ8¸ö¿ÉÒÔÍâ½ÓµÄÊäÈëͨµÀ£¬ÓɾßÌåµÄÓ²¼þƽ̨¾ö¶¨¡£²Î¿¼telosb½ÚµãµÄÊý¾ÝÊֲᣬÍâÖõÄÎÂʪ¶È´«¸ÐÆ÷ºÍ¹âµç´«¸ÐÆ÷·Ö±ð¶ÔÓÚA3ºÍA4ͨµÀ¡£

16·ÊäÈëͨµÀ

Msp430Adc12.h

Page 30 of 94

TinyOS Programming

enum inch_enum {

// see device specific data sheet which pin Ax is mapped to INPUT_CHANNEL_A0 = 0, // input channel A0 INPUT_CHANNEL_A1 = 1, // input channel A1 INPUT_CHANNEL_A2 = 2, // input channel A2 INPUT_CHANNEL_A3 = 3, // input channel A3 INPUT_CHANNEL_A4 = 4, // input channel A4 INPUT_CHANNEL_A5 = 5, // input channel A5 INPUT_CHANNEL_A6 = 6, // input channel A6 INPUT_CHANNEL_A7 = 7, // input channel A7

EXTERNAL_REF_VOLTAGE_CHANNEL = 8, // VeREF+ (input channel 8) REF_VOLTAGE_NEG_TERMINAL_CHANNEL = 9, // VREF-/VeREF- (input channel 9)

TEMPERATURE_DIODE_CHANNEL = 10, // Temperature diode (input channel 10)

SUPPLY_VOLTAGE_HALF_CHANNEL = 11, // (AVcc-AVss)/2 (input channel 11-15)

INPUT_CHANNEL_NONE = 12 // illegal (identifies invalid settings) };

ÄÚ²¿µçѹ´«¸ÐÆ÷Msp430InternalVoltageµÄʵÏÖÈçÏÂËùʾ£º Msp430InternalVoltageP.nc

module Msp430InternalVoltageP {

provides interface AdcConfigure; }

implementation {

const msp430adc12_channel_config_t config = {

inch: SUPPLY_VOLTAGE_HALF_CHANNEL, //ÊäÈëͨµÀ sref: REFERENCE_VREFplus_AVss, //²Î¿¼µçѹ ref2_5v: REFVOLT_LEVEL_1_5, adc12ssel: SHT_SOURCE_ACLK, adc12div: SHT_CLOCK_DIV_1, sht: SAMPLE_HOLD_4_CYCLES,

sampcon_ssel: SAMPCON_SOURCE_SMCLK, sampcon_id: SAMPCON_CLOCK_DIV_1 };

async command const msp430adc12_channel_config_t* AdcConfigure.getConfiguration() {

return &config; } }

ÄÚ²¿µçѹµÄÊäÈëͨµÀinch£ºSUPPLY_VOLTAGE_HALF_CHANNEL¶ÔÓÚΪADC11£¬Èç¹û½«ÊäÈëͨµÀÉèΪINPUT_CHANNEL_A3£¨INPUT_CHANNEL_A4£©£¬¼´ÎªÎ¶ȴ«¸ÐÆ÷£¨¹âµç´«¸ÐÆ÷£©¡£

Page 31 of 94

TinyOS Programming

µÚ5Õ TinyOSÈÎÎñ¼°Ó¦ÓþÙÀý

±¾ÕÂÒÔʵÀýµÄ·½Ê½½éÉÜTinyOSµÄÒ»¸öÖØÒª¸ÅÄÈÎÎñ¡£Ëù¾ÙÀý×Ó£ºSenseTask£¬ÊÇSenseÓ¦ÓóÌÐòµÄÁíÒ»¸ö°æ±¾¡£

5.1 ÈÎÎñµÄ´´½¨ºÍµ÷¶È

TinyOS ÌṩÈÎÎñºÍÓ²¼þʼþ¾ä±ú×é³ÉµÄÁ½²ãµ÷¶È²ßÂÔ¡£ÈçǰËùÊö£¬¹ý¹Ø¼ü×Ö async ÉùÃ÷Á˿ɱ»Ó²¼þʼþ¾ä±úÖ´ÐеÄÃüÁî»òʼþ¡£ÕâÒâζ×ÅËü¿ÉÒÔÔÚÈκÎʱºòÖ´ÐУ¨¿ÉÄÜ»áÇÀÕ¼ÆäËü´úÂëµÄÖ´ÐУ©¡£Òò´Ë£¬Óà async ÉùÃ÷µÄÃüÁîºÍʼþËù×öµÄ¹¤×÷Ó¦¸Ã×ö¾¡Á¿ÉÙ£¬ÇÒÒª¿ìËÙÍê³É¡£´ËÍ⣬»¹µÃ×¢Òâ±»Òì²½ÃüÁî»òʼþ·ÃÎʵÄÊý¾Ý¿ÉÄÜ´æÔÚµÄÊý¾Ý¾ºÕù¡£ÈÎÎñÔò±»ÓÃÀ´´¦ÀíһЩ½Ï³¤Ê±¼äµÄ²Ù×÷£¬ÀýÈ磺ºǫ́Êý¾Ý´¦Àí£¬µ«ÈÎÎñ¿ÉÒÔ±»Ó²¼þʼþ¾ä±úÇÀÕ¼¡£

Ò»¸öÈÎÎñ¿ÉÒÔÓÃÒÔÏÂÓï·¨ÔÚÄãµÄʵÏÖÄ£¿éÖÐÉùÃ÷£º task void taskname(){ //?? } ÆäÖУ¬taskname ÊdzÌÐòÔ±ÈÎÒâÖ¸¶¨µÄÈÎÎñµÄ±êʶ£¬Ò²¾ÍÊÇ¡°º¯ÊýÃû¡±¡£Ò»¸öÈÎÎñµÄ·µ»ØÖµÀàÐͱØÐëÊÇ void£¬²¢ÇÒ²»ÄÜÓÐÈκβÎÊý¡£¶øÏò²Ù×÷ϵͳÌá½»ÈÎÎñÔò¿ÉÒÔÓÃÒÔÏÂÓï·¨£º post taskname(); Ò»¸öÈÎÎñ¿ÉÒÔÔÚÃüÁʼþ»òÆäËüÈÎÎñÄÚ²¿Ïò²Ù×÷ϵͳÌá½»¡£

post ²Ù×÷°ÑÈÎÎñ·ÅÖõ½Ò»¸öÒÔÏȽøÏȳöΪ´¦Àí·½Ê½µÄÄÚ²¿ÈÎÎñ¶ÓÁÐÖÐÈ¥¡£µ±Ò»¸öÈÎÎñ¿ªÊ¼Ö´ÐеÄʱºò£¬Ö»ÓÐËüÔËÐнáÊø£¬ÏÂÒ»¸öÈÎÎñ²ÅÄÜ¿ªÊ¼ÔËÐУ»Òò´Ë£¬Ò»¸öÈÎÎñ²»Ó¦¸ÃÕ¼Óûò×èÈûÌ«³¤Ê±¼ä¡£ÈÎÎñÖ®¼ä²»¿ÉÒÔ»¥ÏàÇÀÕ¼£¬µ«ÊǻᱻӲ¼þʼþ¾ä±úÇÀÕ¼¡£Èç¹ûÄãµÄÈÎÎñÐèÒªÖ´ÐÐһϵÁг¤Ê±¼äµÄ²Ù×÷£¬×îºÃ°ÑÈÎÎñ·Ö³É¼¸¸ö¶ø²»ÊÇʹÓÃÒ»¸ö´óµÄÈÎÎñ¡£

Page 32 of 94

TinyOS Programming

5.2 ¾ÙÀý£ºSenseTaskÓ¦ÓóÌÐò

ÏÖÔÚ¾ÙÀý˵Ã÷һϣ¬´ó¼Ò¿ÉÒÔÔÚtinyos-2.x\\apps\\SenseTaskĿ¼ÏÂÕÒµ½Àý×ÓµÄÔ´´úÂë¡£×é¼þSenseTaskMά»¤Ò»¸öÑ­»·¡°¶ÓÁС±£ºrdata£¬¸Ã¶ÓÁаüº¬×î½ü²É¼¯µ½µÄÄÚ²¿Î¶ÈÊý¾Ý£»putdata() º¯ÊýÓÃÀ´°ÑвÉÑùµÃµ½µÄÊý¾Ý²åÈë¶ÓÁС£dataReady() ʼþÔò¼òµ¥µØ±£´æÊý¾Ý²¢Ìá½»Ò»¸öÃûΪprocessData() ÈÎÎñ¡£

// SenseTaskM.nc async event result_t ADC.dataReady(uint16_t data) { putdata(data); post processData(); return SUCCESS; } Ò첽ʼþÖ´ÐÐÍê³Éºó£¨ÕâÆÚ¼ä¿ÉÄÜÓÐÆäËüÈÎÎñ±»¹ÒÆð£©£¬processData() ÈÎÎñ½«µÃµ½ÔËÐеĻú»á¡£¸ÃÈÎÎñ½«ADC×î½ü²ÉÑùËùµÃµÄÖµÇóºÍ²¢ÔÚLEDÖÐÏÔʾÆä8 ~ 10λ¡£

//SenseTaskM.nc task void processData() { int16_t i, sum=0; atomic for (i=0; i> 7); display(sum >> log2size); } ÈÎÎñprocessData() ÀïʹÓÃÁ˹ؼü×Öatomic£¬ÔÚnesCÀïÃæ³ÆÖ®ÎªÔ­×ÓÓï¾ä¡£ÕâÒâζ׎ô½Ó×ÅatomicºóÃæµÄÒ»¶Ô´óÀ¨ºÅÀïµÄ´úÂë²»¿ÉÒÔ±»ÇÀÕ¼¡£ÔÚ´ËÀýÖУ¬·ÃÎʹ²Ïí»º³åÇørdataÊÇÐèÒªÊܱ£»¤µÄ¡£

Ô­×ÓÓï¾ä»áʹÖжϴ¦ÀíÑÓ³Ù´Ó¶øµ¼ÖÂϵͳÏìÓ¦»ºÂý£¬ÎªÁ˼õÉÙÕâÖÖÓ°Ï죬ԭ×ÓÓï¾äÓ¦¸Ã±ÜÃâµ÷ÓÃÃüÁî»ò´¥·¢Ê¼þ¡£

5.3 С½á

ÈÎÎñÊÇTinyOSÖÐÒ»¸ö·Ç³£ÖØÒªµÄ¸ÅÄÔÚ±à³ÌÖо­³£»áÓõ½¡£±¾ÕÂҪעÒâµÄ¼¸µã£¬ÈçÏ£º 1) ÈÎÎñµÄÉùÃ÷£¬·µ»ØÀàÐͱØÐëΪvoid£¬ÇÒÎÞÈκβÎÊý£» 2) ÈÎÎñÀïÖ´ÐеÄÈÎÎñ²»Ó¦¸ÃÕ¼ÓÃÌ«³¤Ê±¼ä£» 3) ·ÃÎʹ²Ïí±äÁ¿µÈ¾¡Á¿Ê¹ÓÃatomicÓï¾ä£»

4) Ô­×ÓÓï¾äÓ¦¸Ã¾¡Á¿±ÜÃâµ÷ÓÃÃüÁî»ò´¥·¢Ê¼þ¡£

Page 33 of 94

ÁªÏµ¿Í·þ£º779662525#qq.com(#Ìæ»»Îª@)