This program loads values from flash into an array and prints them. If reads 'g' from pc, then adds 20 to every element in the array, and stores it in flash.

Dependencies:   mbed FreescaleIAP

Committer:
diegocode
Date:
Sun Oct 25 02:03:12 2020 +0000
Revision:
0:48302c51206d
versin de prueba ; carga valores desde flash a un vector y si recibe 'g' de la pc ; le suma 20 a c/u y los guarda nuevamente en flash.; ; ;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
diegocode 0:48302c51206d 1 #include "mbed.h"
diegocode 0:48302c51206d 2 #include "FreescaleIAP.h"
diegocode 0:48302c51206d 3
diegocode 0:48302c51206d 4 // cantidad de bytes a guardar
diegocode 0:48302c51206d 5 const int CANT = 10;
diegocode 0:48302c51206d 6
diegocode 0:48302c51206d 7 DigitalOut myled(LED_GREEN);
diegocode 0:48302c51206d 8 Serial pc(USBTX, USBRX);
diegocode 0:48302c51206d 9
diegocode 0:48302c51206d 10 int main()
diegocode 0:48302c51206d 11 {
diegocode 0:48302c51206d 12 unsigned int status_prg = 0;
diegocode 0:48302c51206d 13
diegocode 0:48302c51206d 14 pc.baud(9600);
diegocode 0:48302c51206d 15
diegocode 0:48302c51206d 16 // address es la dirección donde grabará los 10 bytes
diegocode 0:48302c51206d 17 // el último sector de FLASH
diegocode 0:48302c51206d 18 const int address = flash_size() - SECTOR_SIZE;
diegocode 0:48302c51206d 19
diegocode 0:48302c51206d 20 pc.printf("direccion donde graba: %x\r\ncantidad de bytes maximo %d\r\n", address, SECTOR_SIZE);
diegocode 0:48302c51206d 21
diegocode 0:48302c51206d 22 // data apunta al inicio de la dirección donde están grabados loos datos
diegocode 0:48302c51206d 23 char *data = (char*)address;
diegocode 0:48302c51206d 24
diegocode 0:48302c51206d 25 // erase_sector(address); // pone todo el sector de datos en 0xFF (borrado)
diegocode 0:48302c51206d 26
diegocode 0:48302c51206d 27 // buffer donde cargo datos que leo o que voy a escribir
diegocode 0:48302c51206d 28 char valores[CANT];
diegocode 0:48302c51206d 29
diegocode 0:48302c51206d 30 pc.printf("- contenido actual: ---\r\n");
diegocode 0:48302c51206d 31 // muestra el contenido de los 10 bytes
diegocode 0:48302c51206d 32 // carga datos en el vector
diegocode 0:48302c51206d 33 // si es 0xFF (nunca se utilizó) coloca en el vector un valor default
diegocode 0:48302c51206d 34 for(int k =0; k < CANT; k++) {
diegocode 0:48302c51206d 35 if (*(data + k) != 0xFF)
diegocode 0:48302c51206d 36 valores[k] = *(data + k);
diegocode 0:48302c51206d 37 else
diegocode 0:48302c51206d 38 valores[k] = k;
diegocode 0:48302c51206d 39 pc.printf("%x - %d\r\n", valores[k], valores[k]);
diegocode 0:48302c51206d 40 }
diegocode 0:48302c51206d 41
diegocode 0:48302c51206d 42 pc.printf("- a grabar: ---\r\n");
diegocode 0:48302c51206d 43
diegocode 0:48302c51206d 44
diegocode 0:48302c51206d 45 bool grabado = false;
diegocode 0:48302c51206d 46 while(true) {
diegocode 0:48302c51206d 47 // si se recibe 'g' de la pc...
diegocode 0:48302c51206d 48 if (pc.getc() == 'g'){
diegocode 0:48302c51206d 49
diegocode 0:48302c51206d 50 // y no se grabó aun...
diegocode 0:48302c51206d 51 if (!grabado){
diegocode 0:48302c51206d 52 // le suma 20 a cada valor en el vector
diegocode 0:48302c51206d 53 for(int k =0; k < CANT; k++) {
diegocode 0:48302c51206d 54 valores[k] = valores[k] + 20;
diegocode 0:48302c51206d 55 pc.printf("%x - %d\r\n", valores[k], valores[k]);
diegocode 0:48302c51206d 56 }
diegocode 0:48302c51206d 57
diegocode 0:48302c51206d 58 // borra el espacio de FLASH
diegocode 0:48302c51206d 59 status_prg = erase_sector(address);
diegocode 0:48302c51206d 60 pc.printf("borrado 0x%02X-----\r\n", status_prg);
diegocode 0:48302c51206d 61
diegocode 0:48302c51206d 62 // guarda el vector en FLASH
diegocode 0:48302c51206d 63 status_prg = program_flash(address, (char*)&valores, CANT);
diegocode 0:48302c51206d 64 pc.printf("grabado 0x%02X-----\r\n", status_prg);
diegocode 0:48302c51206d 65 grabado = true;
diegocode 0:48302c51206d 66 }
diegocode 0:48302c51206d 67 }
diegocode 0:48302c51206d 68 }
diegocode 0:48302c51206d 69 }