[Tinyos-help] Problem with startPeriodicAt() timer
Mindaugas Jaraminas
minde.j at gmail.com
Mon May 4 00:55:46 PDT 2009
Hello Linas,
I have checked your code and it seems it is a possible bug left in system.
When I comment line 64 in TestPrintfC.nc file timer starts to work properly.
Perhaps someone from TOS developers can confirm it ?
--
Best regards
Mindaugas Jaraminas
2009/4/28 Linas Ramanauskas <linraman at gmail.com>:
> Hello,
>
> Here is a demo application where each two seconds timer should fire
> and print time returned by getNow(). To start the timer,
> startPeriodicAt(delay, interval) is called at
> RadioControl.startDone(). If delay is 100ms timer works correctly and
> fires each 2 seconds. If delay is 200ms timer starts to fire without
> any responsibility and fires in a rate of couple ms.
>
>
> Correct result (displayed time is in ms):
>
> Boot.booted() delay = 100, interval = 2048
> RadioControl.startDone() SUCCESS
> 2148
> 4196
> 6244
> 8292
> ...
>
> Incorrect result (displayed time is in ms):
>
> Boot.booted() delay = 200, interval = 2048
> RadioControl.startDone() SUCCESS
> 143
> 149
> 150
> 152
> 158
> 160
> ...
>
>
> If call RoutingControl.start(); is commented in both cases timer works
> correctly. Please, can anyone tell me what is wrong? Is it a bug?
> Source code is below and also attached to this e-mail. Tested with
> TinyOS 2.1.0 released at 2009/02/05 with a TelosB platform.
>
>
> *** File: Makefile ***
>
> COMPONENT=TestPrintfAppC
> CFLAGS += -I$(TOSDIR)/lib/printf
>
> CFLAGS += -I$(TOSDIR)/lib/net \
> -I$(TOSDIR)/lib/net/le \
> -I$(TOSDIR)/lib/net/ctp
>
> include $(MAKERULES)
>
>
>
> *** File: TestPrintfAppC.nc ***
>
> #include "printf.h"
>
> configuration TestPrintfAppC{
> }
> implementation {
> components MainC, TestPrintfC;
> components new TimerMilliC() as TestTimer;
>
> TestPrintfC.Boot -> MainC;
> TestPrintfC.TestTimer -> TestTimer;
>
> components ActiveMessageC;
> TestPrintfC.RadioControl -> ActiveMessageC;
>
> components CollectionC as Collector;
> TestPrintfC.RoutingControl -> Collector;
>
> components new CollectionSenderC(1) as CollectionSender;
> TestPrintfC.CollectionSend -> CollectionSender;
> }
>
>
>
> *** File: TestPrintfC.nc ***
>
> #include "printf.h"
>
> module TestPrintfC (){
> uses {
> interface Boot;
> interface Timer<TMilli> as TestTimer;
>
> interface SplitControl as RadioControl;
> interface StdControl as RoutingControl;
> interface Send as CollectionSend;
> }
> }
> implementation {
> uint32_t delay;
> uint32_t interval;
>
> event void Boot.booted() {
> delay = 200;
> interval = 2048;
> call RadioControl.start();
> printf("\nBoot.booted() delay = %lu, interval = %lu\n", delay, interval);
> printfflush();
> }
>
> event void RadioControl.startDone(error_t err) {
> printf("RadioControl.startDone() ");
>
> if (err == SUCCESS) {
> call RoutingControl.start(); // if this is commented timers
> works correctly
> printf("SUCCESS\n");
> }
> else {
> call RadioControl.start();
> printf("FAIL\n");
> }
>
> printfflush();
> call TestTimer.startPeriodicAt(delay, interval);
> }
>
> event void TestTimer.fired() {
> printf("%lu\n", call TestTimer.getNow());
> printfflush();
> }
>
> event void RadioControl.stopDone(error_t err) {}
>
> event void CollectionSend.sendDone(message_t *m, error_t err) {
> printf("CollectionSend.sendDone()\n");
> printfflush();
> }
> }
>
>
> Best regards,
> Linas Ramanauskas
>
> _______________________________________________
> Tinyos-help mailing list
> Tinyos-help at millennium.berkeley.edu
> https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
>
More information about the Tinyos-help
mailing list