Hello.

I have problem with Resource.request() in SoftwareInit.init(), simple code 
(the same code as in RF230DriverLayerP.SoftwareInit.init()):

command error_t SoftwareInit.init() {
   call SpiResource.request();
}

Resource.request() fails (EBUSY). I debug code and I found that
internal data structure "resQ" FcfsResourceQueueC was not 
initialized (to NO_ENTRY (eg. 0xff)) FcfsResourceQueueC.Init.init() was not 
called for 
that resource.

app.c (nesc translated output) contain this:

static error_t RealMainP__SoftwareInit__init(void ){
   unsigned char __nesc_result;
   __nesc_result = RF230DriverLayerP__SoftwareInit__init(); // 
<========================
   __nesc_result = ecombine(__nesc_result, RandomMlcgC__Init__init());
   __nesc_result = ecombine(__nesc_result, 
/*RF230RadioC.MessageBufferLayerC.MessageBufferLayerP*/MessageBufferLayerP__0__SoftwareInit__init());
   __nesc_result = ecombine(__nesc_result, NeighborhoodP__Init__init());
   __nesc_result = ecombine(__nesc_result, 
/*RF230RadioC.UniqueLayerC.UniqueLayerP*/UniqueLayerP__0__Init__init());
   __nesc_result = ecombine(__nesc_result, 
/*RF230RadioC.SendResourceC.Queue*/FcfsResourceQueueC__3__Init__init());
   __nesc_result = ecombine(__nesc_result, PutcharP__Init__init());
   __nesc_result = ecombine(__nesc_result, 
/*Atm1281UsartShare1P.ArbiterC.Queue*/FcfsResourceQueueC__2__Init__init());
   __nesc_result = ecombine(__nesc_result, SerialPrintfP__Init__init());
   __nesc_result = ecombine(__nesc_result, 
WserialIeeeEui64P__SoftwareInit__init()); // <========================
   __nesc_result = ecombine(__nesc_result, 
/*At45dbC.Arbiter.Queue*/FcfsResourceQueueC__1__Init__init());
   __nesc_result = ecombine(__nesc_result, 
/*Atm128SpiC.Arbiter.Queue*/FcfsResourceQueueC__0__Init__init()); // 
<=========================
   __nesc_result = ecombine(__nesc_result, At45dbP__Init__init());
   __nesc_result = ecombine(__nesc_result, 
/*AlarmCounterMilliP.Atm128AlarmAsyncC.Atm1281AlarmAsyncP*/Atm1281AlarmAsyncP__0__Init__init());
   return __nesc_result;
}

My call is in "WserialIeeeEui64P__SoftwareInit__init" (or 
RF230DriverLayerP__SoftwareInit__init)
but arbiter initialization is initializad after that in 
"FcfsResourceQueueC__0__Init__init".
(RF230,eui serial eeprom,At45db,+3 more to spi are on same arbitrated spi bus).

What is this (bug or feature) ?

How to establish "specific initialization ordering" for MainC.SoftwareInit 
(tep107) ?

Thanks, Martin Cerveny
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to