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();
}
}
运行结果如下:
其中,如果使用MicaZ平台的TOSSIM仿真时,只需在调用printf语句的文件头添加printf.h头文件即可,然后像C语言中的那样直接使用printf函数,那么在运行仿真程序时就可以在终端输出所需要的信息。
转载于:https://blog.51cto.com/xjhznick/1221024