Embedded Artists
We are the leading providers of products and services around prototyping, evaluation and OEM platforms using NXP's ARM-based microcontrollers.
You are viewing an older revision! See the latest version
LPC4088DM Using the Registry
The LPC4088 MCU on the display modules have an internal 4032 byte EEPROM that can be used to store data persistently.
The InternalEEPROM is described here.
The memory is ideally suited to store small bits of configuration data between program runs. It could be last played file in a music player, last shown image in a slideshow, network settings etc.
The DMSupport library has a Registry class to help with this.
The Registry is intended to be used in the RTOS so all operations are thread safe. One of the purposes with the Registry is to allow one thread to store data that another thread needs. An example is to have the GUI thread store the network configuration in the Registry so that the networking thread can read it and setup the network accordingly.
To use the Registry it must first be enabled in the dm_board_config.h file:
#define DM_BOARD_USE_REGISTRY
It is then initialized and all (if any) existing key-value pairs are loaded by the init() function in DMBoard.
static void testRegistry() { Registry* reg = DMBoard::instance().registry(); RtosLog* log = DMBoard::instance().logger(); char* key; char* val; Registry::RegistryError err; // Print all existing values for (int i = 0; i < reg->numEntries(); i++) { err = reg->entryAt(i, &key, &val); if (err == Registry::Ok) { log->printf("[%2d] '%s' = '%s'\n", i, key, val); free(key); free(val); } } // Reading a value: err = reg->getValue("IP Address", &val); if (err == Registry::Ok) { log->printf("'IP Address' = '%s'\n", val); free(val); } else if (err == Registry::NoSuchKeyError) { log->printf("'IP Address' has no value in registry\n"); } else { log->printf("'IP Address' got error %d\n", err); } // Write a value (possibly overwriting the old value) err = reg->setValue("IP Address", "192.168.0.10"); if (err == Registry::Ok) { log->printf("'IP Address' set to 192.168.0.10\n"); } else { log->printf("Failed to set 'IP Address', got error %d\n", err); } // Store the values in the EEPROM log->printf("Storing values persistently\n"); err = reg->store(); if (err != Registry::Ok) { log->printf("Failed to store values, got error %d\n", err); } }
Note
The Registry occupies the entire onchip EEPROM so use either the Registry or the InternalEEPROM - not both at the same time.