printf 库(tos/lib/printf)是TinyOS系统的打印库,运行在节点上的应用程序使用printf库可以将调试信息发送到PC串口,最终显示在终端屏幕上。开发者只需要简单地将PrintfC组件包含到顶层配件中,并在任何条用printf命令的组件里包含printf.h头文件。

   当前的TinyOS的printf库只支持MSP430和Atmega128平台,如MicaZ、Mica2、Telos、EyesIFX等节点。

   实例运行tinyos安装系统自带的示例程序/apps/tutorials/Printf,Makefile、TestPrintfAppC.nc和TestPrintfC.nc文件源代码如下:

COMPONENT=TestPrintfAppC
CFLAGS += -I$(TOSDIR)/lib/printf
#CFLAGS += -DNEW_PRINTF_SEMANTICS
include $(MAKERULES)

 

#define NEW_PRINTF_SEMANTICS
#include "printf.h"
configuration TestPrintfAppC{
}
implementation {
  components MainC, TestPrintfC;
  components new TimerMilliC();
  components PrintfC;
  components SerialStartC;
  TestPrintfC.Boot -> MainC;
  TestPrintfC.Timer -> TimerMilliC;
}


#include "printf.h"
module TestPrintfC {
  uses {
    interface Boot;
    interface Timer<TMilli>;
  }
}
implementation {
                                                              
  uint8_t dummyVar1 = 123;
  uint16_t dummyVar2 = 12345;
  uint32_t dummyVar3 = 1234567890;
  event void Boot.booted() {
    call Timer.startPeriodic(1000);
  }
  event void Timer.fired() {
    printf("Hi I am writing to you from my TinyOS application!!\n");
    printf("Here is a uint8: %u\n", dummyVar1);
    printf("Here is a uint16: %u\n", dummyVar2);
    printf("Here is a uint32: %ld\n", dummyVar3);
    printfflush();
  }
}

运行结果如下:

102058173.png

102058402.png

102058390.png

其中,如果使用MicaZ平台的TOSSIM仿真时,只需在调用printf语句的文件头添加printf.h头文件即可,然后像C语言中的那样直接使用printf函数,那么在运行仿真程序时就可以在终端输出所需要的信息。