I don't know how the read interface works, but you may have to
pass a buffer in to be filled. If that's the case I don't see
where you set lineEERPOM or dataEEPROM to point to anything.
MS


Li Zhao wrote:
> Hi Michael,
> 
> I change the code as you said, and it works! Thank you very much.
> 
> There is still some errors left (i.e. loggerRead error), and I am trying 
> to fix it.
> 
> Cheers
> Li ZHAO
> 
> 2009/3/15 Michael Schippling <[email protected] <mailto:[email protected]>>
> 
>     One thing pops out to me in start():
> 
>        ptr = (char*)buffer[bufferIndex];
> 
>     This is turning a value in your buffer into a pointer
>     and it probably points to nothing. I think you want this:
> 
>        ptr = (char*)buffer;
> 
>     which will make "ptr" point to the beginning of your buffer.
>     Have a look at a C reference, like
>     http://en.wikibooks.org/wiki/C_Programming
>     for details of pointer and array use.
> 
>     It looks as if "bufferIndex" is meant to be used to do
>     some kind of buffer swapping. e.g., so you could fill one
>     while emptying another. But you only allocate one buffer
>     so it's not fully implemented and done incorrectly in
>     you example anyway.
> 
>     Also check that you are reading/writing the right number
>     of bytes. ints are usually 2 bytes long in our micro-controllers.
> 
>     MS
> 
>     Li Zhao wrote:
> 
>         Hi,
> 
>         Sorry to border and sorry for the long email.
> 
>         I tried my best to build a sample for nesC. Since I have never
>         done C before, some of the coding may be unreasonable. Anyway,
>         the program is:
>         first, to automatically create an array buffer[maxdata] with value.
>         second, in the start(), to write the buffer[] into EEPROM with
>         Logger component.
>         third, when event Logger.writeDone() signalled, post task
>         readTask() to read that data from EEPROM into dataEEPROM. Here
>         is the source code:
> 
>         
> =================================================================================================
>         FlashTest.nc
>         configuration FlashTest {
>         }
> 
>         implementation {
>          components Main, FlashTestM, Logger, LedsC;
> 
>          Main.StdControl -> FlashTestM;
>            FlashTestM.Leds -> LedsC;
>            FlashTestM.LoggerControl -> Logger.StdControl;
>          FlashTestM.LoggerWrite -> Logger;
>          FlashTestM.LoggerRead -> Logger;
>         }
> 
>         FlashTestM.nc
>         module FlashTestM {
>           provides {
>              interface StdControl;
>           }
>             uses {
>              interface StdControl as LoggerControl;
>              interface Leds;
>              interface LoggerRead;
>              interface LoggerWrite;
>            }
>         }
> 
>         implementation
>         {     enum {
>              maxdata = 16       //circular buffer size
>           };
>             char head;           // index to the head of the circular buffer
>           uint8_t bufferIndex;    // current index to the circular
>         double buffer
>           int buffer[maxdata];    // circular double buffer
>             uint16_t lineEEPROM;
>           uint8_t* dataEEPROM;
> 
>            command result_t StdControl.init() {
> 
>             atomic {
>                   int i;               bufferIndex = 0;
>                   for (i=0;i<maxdata;i++) {
>                      buffer[i]=(i*2);
>                   }    //give initial value to the array          }
>              return rcombine(call LoggerControl.init(), call Leds.init());
>           }
>              command result_t StdControl.start(){          char* ptr;
>              lineEEPROM = 13;
>              atomic {
>                ptr = (char*)buffer[bufferIndex];
>                bufferIndex ^= 0x01;
>              }
>              call LoggerWrite.append(ptr);
>              //call LoggerWrite.write(lineEEPROM, ptr);          return
>         call LoggerControl.start();
>            }
>              command result_t StdControl.stop(){
>              return SUCCESS;
>            }
>              task void readTask() {
>              atomic {
>                call LoggerRead.resetPointer();
>                call LoggerRead.readNext(dataEEPROM);
>                //call LoggerRead.read(lineEERPOM, dataEEPROM);
>              }
>            }
>           event result_t LoggerWrite.writeDone( result_t status ) {
>             if (status) call Leds.yellowToggle();
>             post readTask();
>             return SUCCESS;
>           }
>            event result_t LoggerRead.readDone(uint8_t * packet, result_t
>         status) {
>            if (status) call Leds.greenToggle();
>            return SUCCESS;
>          }  } // end of implementation
> 
>         
> =====================================================================================
>         However, I got errors during the simulation. It posted that:
>         
> =====================================================================================
>         $ ./build/pc/main.exe -t=10 1
>         SIM: EEPROM system initialized.
>         SIM: event queue initialized.
>         SIM: Random seed is 502500
>         SIM: Initializing sockets
>         SIM: Created server socket listening on port 10584.
>         SIM: Created server socket listening on port 10585.
>         SIM: eventAcceptThread running.
>         SIM: Time for mote 0 initialized to 33630025.
>         SIM: commandReadThread running.
>         0: BOOT: Scheduling for boot at 0:0:8.40750625.
>         0: Popping event for mote 0 with time 0:0:8.40750625.
>         0: Setting TOS_LOCAL_ADDRESS to 0
>         0: BOOT: Mote booting at time 0:0:8.40750625.
>         0: LEDS: initialized.
>         0: Logger initialized.
>         0: Popping event for mote 0 with time 0:0:8.43127450.
>         0: Setting TOS_LOCAL_ADDRESS to 0
>         0: ERROR: Write to EEPROM failed: Bad address.
>         0: LOGGER: Log write to line 16 completed
>         Segmentation fault (core dumped)
>         
> ==========================================================================================
>         After that, I changed my code. I replace code in StdControl.start()
>         
> ==========================================================================================
>              call LoggerWrite.append(ptr);
>              //call LoggerWrite.write(lineEEPROM, ptr);                
>                          with
>              //call LoggerWrite.append(ptr);
>              call LoggerWrite.write(lineEEPROM, ptr);
>          
> ===========================================================================================
>         Than the simulation just ceased with no responding.
>         
> ============================================================================================
>         administra...@www-8e2ac5f0416 /cygdrive/c/program
>         files/ucb/cygwin/opt/tinyos-1.
>         x/apps/flashtest
>         $ ./build/pc/main.exe -t=10 1
>         SIM: EEPROM system initialized.
>         SIM: event queue initialized.
>         SIM: Random seed is 502500
>         SIM: Initializing sockets
>         SIM: Created server socket listening on port 10584.
>         SIM: Created server socket listening on port 10585.
>         SIM: eventAcceptThread running.
>         SIM: Time for mote 0 initialized to 33630025.
>         SIM: commandReadThread running.
>         0: BOOT: Scheduling for boot at 0:0:8.40750625.
>         0: Popping event for mote 0 with time 0:0:8.40750625.
>         0: Setting TOS_LOCAL_ADDRESS to 0
>         0: BOOT: Mote booting at time 0:0:8.40750625.
>         0: LEDS: initialized.
>         0: Logger initialized.
>              just ceased here...have to ctrl+C to stop
>         Exiting on SIGINT at 0:0:8.40750625.
>         SIM: commandReadThreadFunc: error in select(): Interrupted
>         system call
>         
> =====================================================================================
>         Sorry for that long email. But I really appreciate that you help
>         me out. Looking forward to your quick response.
>         -- 
>         Thanks
>         Li ZHAO
> 
>         (0044) 07500804257
> 
> 
>         
> ------------------------------------------------------------------------
> 
>         _______________________________________________
>         Tinyos-help mailing list
>         [email protected]
>         <mailto:[email protected]>
>         
> https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
> 
> 
>     -- 
>     Platform: WinXP/Cygwin
>     TinyOS version: 1.x, Boomerang
>     Programmer: MIB510
>     Device(s): Mica2, MicaZ, Tmote
>     Sensor board: homebrew
> 
> 
> 
> 
> -- 
> Thanks
> Li ZHAO
> 
> (0044) 07500804257

-- 
Platform: WinXP/Cygwin
TinyOS version: 1.x, Boomerang
Programmer: MIB510
Device(s): Mica2, MicaZ, Tmote
Sensor board: homebrew

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

Reply via email to