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]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help