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

📄 debugc.nc

📁 传感器网络中的嵌入式操作系统源代码
💻 NC
字号:
// $Id: DebugC.nc,v 1.1.2.2 2003/08/18 22:09:49 cssharp Exp $/*									tab:4 * "Copyright (c) 2000-2003 The Regents of the University  of California.   * All rights reserved. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose, without fee, and without written agreement is * hereby granted, provided that the above copyright notice, the following * two paragraphs and the author appear in all copies of this software. *  * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *  * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." * * Copyright (c) 2002-2003 Intel Corporation * All rights reserved. * * This file is distributed under the terms in the attached INTEL-LICENSE      * file. If you do not find these files, copies can be found by writing to * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA,  * 94704.  Attention:  Intel License Inquiry. */module DebugC {  provides interface Debug;  uses {    interface SendMsg;    interface Timer;    event void available();  }}implementation {  /* We buffer up more than one message to deal with bursts */  enum {    DBG_LENGTH = 100  };  char dbg[DBG_LENGTH];  uint8_t dbgStart, dbgEnd, outstanding;  TOS_Msg dbgMsg;  bool sending;  uint16_t address;  command void Debug.init() {    dbgStart = dbgEnd = outstanding = 0;    sending = FALSE;    address = TOS_UART_ADDR;    call Timer.start(TIMER_REPEAT, 1000);  }  command void Debug.setAddr(uint16_t addr) {    address = addr;  }  command void Debug.setTimeout(uint32_t timeout) {    call Timer.stop();    if (timeout != 0)      call Timer.start(TIMER_REPEAT, timeout);  }  void sendDbgInfo() {    uint16_t i, j, newStart;    if (!outstanding || sending)      return;    i = 0;    newStart = dbgStart;    while (i < DATA_LENGTH && i < outstanding)      {	dbgMsg.data[i++] = dbg[newStart++];	if (newStart == DBG_LENGTH)	  newStart = 0;      }    j = i;    while (j < DATA_LENGTH)      dbgMsg.data[j++] = 0x2a;        if (call SendMsg.send(address, DATA_LENGTH, &dbgMsg))      {	sending = TRUE;	dbgStart = newStart;	outstanding -= i;	signal available();      }  }  default event void available() { }  event result_t SendMsg.sendDone(TOS_MsgPtr data, result_t success) {    if (data == &dbgMsg)      sending = FALSE;    return SUCCESS;  }  event result_t Timer.fired() {    sendDbgInfo();    return SUCCESS;  }  command result_t Debug.dbg8(uint8_t x) {    if (outstanding >= DATA_LENGTH)      sendDbgInfo();    if (outstanding < DBG_LENGTH)      {	dbg[dbgEnd++] = x;	if (dbgEnd == DBG_LENGTH)	  dbgEnd = 0;	outstanding++;      }    return outstanding < DATA_LENGTH ? SUCCESS : FAIL;  }  command result_t Debug.dbg16(uint16_t x) {    call Debug.dbg8(x >> 8);    return call Debug.dbg8(x);  }  command result_t Debug.dbg32(uint32_t x) {    call Debug.dbg16(x >> 16);    return call Debug.dbg16(x);  }  command result_t Debug.dbgString(char *s) {    while (*s)      call Debug.dbg8(*s++);    return call Debug.dbg8(0);  }}

⌨️ 快捷键说明

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