⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 synclogc.nc

📁 tinyos2.0版本驱动
💻 NC
字号:
/** * Test reading and writing to a log with lots of syncs. See README.txt for * more details. * * @author Mayur Maheshwari (mayur.maheshwari@gmail.com) * @author David Gay */module SyncLogC{  uses {    interface Leds;    interface Boot;    interface SplitControl as AMControl;    interface LogWrite;    interface LogRead;    interface Timer<TMilli> as Timer0;    interface Timer<TMilli> as Timer1;    interface AMSend;  }}implementation {  uint16_t data = 0;  uint16_t readings = 0;  message_t pkt;  bool busy = FALSE;  bool logBusy = FALSE;  task void sendTask();  storage_cookie_t readCookie;  storage_cookie_t writeCookie;#define SAMPLING_FREQUENCY 2333#define TIMER_PERIOD_MILLI 5120  event void Boot.booted() {    call AMControl.start();  }  event void AMControl.startDone(error_t err) {    if (err == SUCCESS)      call LogWrite.erase();    else      call AMControl.start();  }  event void LogWrite.eraseDone(error_t result) {    call Timer1.startPeriodic(SAMPLING_FREQUENCY);    call Timer0.startPeriodic(TIMER_PERIOD_MILLI);  }    event void Timer1.fired()  {    readings++;    if (!logBusy)      {	logBusy = TRUE;	call LogWrite.append(&readings, sizeof(readings));      }  }  event void LogWrite.appendDone(void *buf, storage_len_t len, bool recordsLost, error_t result) {    if (result == SUCCESS)      call LogWrite.sync();  }  event void LogWrite.syncDone(error_t result) {    logBusy = FALSE;    call Leds.led2Toggle();  }  event void Timer0.fired() {    call Timer1.stop();    if (!logBusy)      {	call Leds.led0Toggle();	logBusy = TRUE;	call LogRead.read(&data, sizeof data);      }  }  event void LogRead.readDone(void* buf, storage_len_t len, error_t error) {    if (error == SUCCESS)      if (len == sizeof data)	post sendTask();      else	{	  logBusy = FALSE;	  call Timer1.startPeriodic(SAMPLING_FREQUENCY);	}  }  typedef nx_struct {    nx_uint16_t nodeid;    nx_uint16_t payloadData;  } SenseStoreRadioMsg;  task void sendTask() {    if (!busy)      {	SenseStoreRadioMsg* ssrpkt =	  (SenseStoreRadioMsg*)(call AMSend.getPayload(&pkt, sizeof(SenseStoreRadioMsg)));	ssrpkt->nodeid = TOS_NODE_ID;	ssrpkt->payloadData = data;	if (call AMSend.send(AM_BROADCAST_ADDR, &pkt, sizeof(SenseStoreRadioMsg)) == SUCCESS)	  busy = TRUE;      }  }  event void AMSend.sendDone(message_t* msg, error_t err) {    if (&pkt == msg)      {	busy = FALSE;	call LogRead.read(&data, sizeof data);      }  }  event void LogRead.seekDone(error_t error) { }  event void AMControl.stopDone(error_t err) { }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -