Skip to content

Commit

Permalink
Merge pull request #2 from pilotak/master
Browse files Browse the repository at this point in the history
mBed online compiler fix + struct example
  • Loading branch information
geky authored Jul 16, 2017
2 parents 2be4faf + 55ff892 commit 286a260
Showing 1 changed file with 57 additions and 0 deletions.
57 changes: 57 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ EEPROM devices support much higher read/write cycles than flash based memory, at
More info on EEPROM can be found on wikipedia:
https://en.wikipedia.org/wiki/EEPROM

## Basic example

``` cpp
// Here's an example using a 24LC256 on a GR PEACH
#include "mbed.h"
Expand Down Expand Up @@ -42,3 +44,58 @@ int main() {
}
```
## Saving struct example
``` cpp
// Here's an example using a 24LC256 to store a C struct
#include "mbed.h"
#include "I2CEEBlockDevice.h"
#define BLOCK_SIZE 32
// Create EEPROM device on I2C bus with 32kbytes of memory
I2CEEBlockDevice i2cee(P0_0, P0_1, 0xA0, 32*1024, BLOCK_SIZE);
uint8_t setting_block_size;
struct t_setting {
uint8_t version;
char name[20];
} setting = {
1,
"Hello World!"
};
int main() {
printf("i2cee struct test\n");
// No. of bytes to be stored, but topped up to be multiplied by block size
unsigned int setting_block_size = ceil(sizeof(setting)/(double)BLOCK_SIZE)*BLOCK_SIZE;
// Temporary buffer
char *buffer = (char*)malloc(setting_block_size);
// Initialize the device
i2cee.init();
// Save struct to EEPROM
printf("\nSaving struct version: %u, name: %s\n", setting.version, setting.name);
memcpy(buffer, &setting, sizeof(setting));
i2cee.program(buffer, 0, setting_block_size);
// Get back what was stored
t_setting tmp; //Re-make the struct
memset(buffer, 0, sizeof(buffer)); // empty buffer, not nessesary but helps when debugging
if (i2cee.read(buffer, 0, setting_block_size ) == 0){ // get data into buffer
// Convert what we read into struct
memcpy(&tmp, buffer, sizeof(tmp)); // copy only size of struct not setting_block_size
printf("\nTemporary struct version: %u, name: %s\n", tmp.version, tmp.name);
} else {
printf("Error when reading\n");
}
// Deinitialize the device
i2cee.deinit();
}
```

0 comments on commit 286a260

Please sign in to comment.