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

Revision:
0:48302c51206d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Oct 25 02:03:12 2020 +0000
@@ -0,0 +1,69 @@
+#include "mbed.h"
+#include "FreescaleIAP.h"
+ 
+// cantidad de bytes a guardar
+const int CANT = 10;
+ 
+DigitalOut myled(LED_GREEN);
+Serial pc(USBTX, USBRX);
+ 
+int main()
+{
+    unsigned int status_prg = 0;
+    
+    pc.baud(9600);
+    
+    // address es la dirección donde grabará los 10 bytes
+    // el último sector de FLASH
+    const int address = flash_size() - SECTOR_SIZE;   
+    
+    pc.printf("direccion donde graba: %x\r\ncantidad de bytes maximo %d\r\n", address, SECTOR_SIZE);
+    
+    // data apunta al inicio de la dirección donde están grabados loos datos
+    char *data = (char*)address;    
+
+//    erase_sector(address);  // pone todo el sector de datos en 0xFF (borrado)
+
+    // buffer donde cargo datos que leo o que voy a escribir
+    char valores[CANT];
+
+    pc.printf("- contenido actual: ---\r\n");
+    // muestra el contenido de los 10 bytes
+    // carga datos en el vector 
+    // si es 0xFF (nunca se utilizó) coloca en el vector un valor default 
+    for(int k =0; k < CANT; k++) {                
+        if (*(data + k) != 0xFF) 
+            valores[k] = *(data + k);
+        else 
+            valores[k] = k;
+        pc.printf("%x - %d\r\n", valores[k], valores[k]);
+    }
+ 
+    pc.printf("- a grabar: ---\r\n");
+    
+          
+    bool grabado = false;
+    while(true) {
+        // si se recibe 'g' de la pc...
+        if (pc.getc() == 'g'){
+            
+            // y no se grabó aun...
+            if (!grabado){
+                // le suma 20 a cada valor en el vector 
+                for(int k =0; k < CANT; k++) {
+                   valores[k] = valores[k] + 20;                   
+                   pc.printf("%x - %d\r\n", valores[k], valores[k]);
+                }
+                
+                // borra el espacio de FLASH
+                status_prg = erase_sector(address);
+                pc.printf("borrado 0x%02X-----\r\n", status_prg);
+                
+                // guarda el vector en FLASH
+                status_prg = program_flash(address, (char*)&valores, CANT);
+                pc.printf("grabado 0x%02X-----\r\n", status_prg);
+                grabado = true;
+            }
+        }
+    }
+}
\ No newline at end of file