目前共有6篇帖子。 内容转换:不转换▼
 
点击 回复
437 5
【程序】TinyOS中的printf语句的使用
一派护法 十九级
1楼 发表于:2016-8-4 16:17
【TestAppC.nc】
configuration TestAppC
{
}
implementation
{
    components TestC, MainC;
    components new TimerMilliC() as t0;
   
    TestC.Boot -> MainC.Boot;
    TestC.t0 -> t0;
}
【TestC.nc】
#include <printf.h>

module TestC
{
    uses interface Boot;
    uses interface Timer<TMilli> as t0;
}
implementation
{
    uint8_t a = 250;
    uint16_t b = 65530u; // 在数字后面加u表示unsigned, 可消除相关警告
    uint32_t c = 4294967290u;
   
    event void Boot.booted(void)
    {
        printf("Hello World!\n");
        printfflush(); // 必须执行这个函数, 否则由于缓存, 发送的内容可能不能及时显示到屏幕上
        call t0.startPeriodic(1000);
    }
   
    event void t0.fired(void)
    {
        printf("a=%u, b=%u, c=%lu\n", a, b, c);
        printfflush();
       
        a++;
        b++;
        c++;
    }
}
【Makefile】
COMPONENT = TestAppC
CFLAGS += -I$(TOSDIR)/lib/printf
include $(MAKERULES)
【run.sh】
java net.tinyos.tools.PrintfClient -comm serial@/dev/ttyUSB0:telosb
一派护法 十九级
2楼 发表于:2016-8-4 16:19
【命令】
编译:make telosb
编译并烧写:make telosb install
查看串口输出信息:./run.sh
(按Ctrl+C退出)
一派护法 十九级
3楼 发表于:2016-8-4 16:20
【运行结果】
一派护法 十九级
4楼 发表于:2016-8-4 16:24
程序每隔1秒钟发送一次信息。
按下节点上的RESET按钮后,可能因数据包突然中断导致接收端输出bad packet的信息,属正常情况。
从运行结果可以看出,uint8_t的最大值为255,uint16_t的最大值为65535,uint32_t的最大值为4294967295。
如果编译程序时出现unsigned的警告,在数字后面加上字母u可消除警告。
一派护法 十九级
5楼 发表于:2016-8-4 17:29

将串口从虚拟机中拔出,然后在Windows环境下打开串口,可以发现每次接收到的数据很复杂,每次都接收到41字节内容,并且字符串的开头"a="从第10个字节处开始。
一派护法 十九级
6楼 发表于:2016-8-4 17:44

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:437 回复数:5
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2016-8-4 17:44
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。