#include "globals.h" GlobalStruct globals = { .ChannelState = {0.0}, .error_queue = {0}, .number_of_errors = 0 }; int readUserBlock(void) { // read the flash.copy file into the globals.Flash struct // and return the number of bytes read in // if the file does not exist, then "return 0"; return 0; } void writeUserBlock(int addr, int numbytes) { // check if flash.copy file exists // - if it does, update the requested address and // number of bytes // - if does not, create the file and // set addr = 0, numbytes = sizeof (mem) // so that entire struct will be written, // instead of just the requested range // All writing should be done in a super-safe // way. Non-corruption, even during a power-off transient, // is the priority here. We do not want instruments // losing configuration data ever, because that // means expensive repairs. } void initFlash(void) { if (readUserBlock() > 0) return; // uninitialized device! globals.Flash.flash_start = (char) 99; strcpy(globals.Flash.aux_error_message,"FIXME"); globals.Flash.channels = (short) 1; globals.Flash.enable_avrq_extra_ampls = (char) 12; globals.Flash.ChanKey_frequency = (char) 0; // save the default Flash config, for nonvolatile persistence writeUserBlock(0, sizeof(globals.Flash)); }