Author Topic: Store an integer array in the RFduino flash  (Read 1646 times)

aroushan

  • RFduino Newbie
  • *
  • Posts: 2
  • Karma: +0/-0
    • View Profile
Store an integer array in the RFduino flash
« on: May 28, 2015, 11:51:06 AM »
I am trying to do some R&D and need to see how the temperature on the RFduino changes in a 5 minute time interval in a location not connected to a serial console, measured every second. I would like to use the built in flash for this. (I am storing bytes so that's 300 bytes of info which should fit on a 1K page, correct?) This is the code I have come up with but it only saves a single value to the flash. Or maybe I am only able to retrieve a single value. It currently runs for 10 seconds (while count<10). How do I save and retrieve the entire values array?

Code: [Select]
// select a flash page that isn't in use (see Memory.h for more info)
#define  MY_FLASH_PAGE  251

// double level of indirection required to get gcc
// to apply the stringizing operator correctly
#define  str(x)   xstr(x)
#define  xstr(x)  #x

byte values[500];
int count = 0;

void setup() {
  Serial.begin(38400);
  Serial.println("All output will appear on the serial monitor.");

  // a flash page is 1K in length, so page 251 starts at address 251 * 1024 = 257024 = 3EC00 hex
  byte *p = (byte*)ADDRESS_OF_PAGE(MY_FLASH_PAGE);
  int rc;

  Serial.println("The data stored in flash page " str(MY_FLASH_PAGE) " contains: ");
  Serial.println(*p);

  Serial.print("Attempting to erase flash page " str(MY_FLASH_PAGE) ": ");
  rc = flashPageErase(PAGE_FROM_ADDRESS(p));
  if (rc == 0)
    Serial.println("Success");
  else if (rc == 1)
    Serial.println("Error - the flash page is reserved");
  else if (rc == 2)
    Serial.println("Error - the flash page is used by the sketch");

  Serial.println("The data stored in flash page " str(MY_FLASH_PAGE) " contains: ");
  Serial.println(*p);


  while (count<10){
    RFduino_ULPDelay(SECONDS(1));
    byte temp = RFduino_temperature(CELSIUS);
    Serial.println (count);
    Serial.println (temp);
    values[count]=temp;
    count++;
  }

  Serial.print("Attempting to write data to flash page " str(MY_FLASH_PAGE) ": ");
  rc = flashWriteBlock(p, &values, sizeof(values));
  if (rc == 0)
    Serial.println("Success");
  else if (rc == 1)
    Serial.println("Error - the flash page is reserved");
  else if (rc == 2)
    Serial.println("Error - the flash page is used by the sketch");

  Serial.println("The data stored in flash page " str(MY_FLASH_PAGE) " contains: ");
  Serial.println(*p);
}

void loop() {

  }


This is my output:


Code: [Select]
All output will appear on the serial monitor.
The data stored in flash page 251 contains:
255
Attempting to erase flash page 251: Success
The data stored in flash page 251 contains:
255
0
33
1
33
2
33
3
33
4
33
5
33
6
33
7
33
8
33
9
33
Attempting to write data to flash page 251: Success
The data stored in flash page 251 contains:
33


I want it to write and retrieve all 10 values!

aroushan

  • RFduino Newbie
  • *
  • Posts: 2
  • Karma: +0/-0
    • View Profile
Re: Store an integer array in the RFduino flash
« Reply #1 on: June 01, 2015, 07:54:26 AM »
http://stackoverflow.com/questions/30514659/how-do-i-store-an-integer-array-in-the-rfduino-flash

access it like an array. see example code below.

Code: [Select]
Serial.println("The data stored in flash page " str(MY_FLASH_PAGE) " contains: ");
for (count = 0; count < 10; count++)
{
    Serial.print(count);
    Serial.print(":");   
    Serial.print(p[count]);
    Serial.print("; ");   
}