Сб фев 23, 2013 13:07:57
settings_save(key, buffer, length);
settings_load(key, buffer, length);
Сб фев 23, 2013 13:57:01
//СТРУКТУРА ВОССТАНАВЛИВАЕМЫХ ИЗ EEPROM ДАННЫХ
struct {
char FirstOnDevice; //байт для инициализации при первом включении устройства (при первом включении = 255)
//при первом включении записывается "s"
char FlagsEE; //байт флагов
#define bEERegEnbl (1<<0) /*флаг включения регистрации данных в EEPROM*/
#define bEEAlrmOn (1<<1) /*флаг включения будильника*/
char AlrmHour, AlrmMin; //данные настроек будильника
char OneWireDevEnMask; //байт индикатор запрограммированных датчиков (0-7)
char OneWireDevNum [64]; //массив номеров устройств 1wire (8 устройств по 8 байт)
char TermoUpLimitEnMask; //байт флагов включенных верхних лимитов
int TermoUpLimitData [8]; //верхние пороги сигнализации температуры
char TermoDnLimitEnMask; //байт флагов включенных нижних лимитов
int TermoDnLimitData [8]; //нижние пороги сигнализации температуры
unsigned char PeriodAlrm; //константа периода напоминания о сработавшем сенсоре (5 - 255 мин)
int PeriodReg; //константа периода регистрации данных (1, 10, 60, 600, 3600 сек)
unsigned int FieldStrtPtr; //указатель на текущую позицию записи в поле данных
unsigned int FieldEndPtr; //указатель на байт следующий за доступным полем данных
char SensName [64]; //имена температурных датчиков 8шт по 8 байтов
} StructEE;
//ФУНКЦИЯ ЧТЕНИЯ СТРУКТУРЫ ИЗ EEPROM
NOINLINE void StructEERead (void)
{
IICMemReadData (&StructEE.FirstOnDevice, 0, sizeof (StructEE));//читаем структуру
}
//ФУНКЦИЯ ЗАПИСИ СТРУКТУРЫ В EEPROM
NOINLINE void StructEEWrite (void)
{
IICMemWriteData (&StructEE.FirstOnDevice, 0, sizeof (StructEE));//пишем структуру
}
&StructEE.FirstOnDevice
StructEE
Сб фев 23, 2013 15:19:45
Сб фев 23, 2013 16:07:18
Сб фев 23, 2013 16:35:43
Сб фев 23, 2013 19:04:23
menzoda писал(а):но тогда накладные расходы при изменении одного параметра будут уж совсем дикие на мой взгляд.
.menzoda писал(а):Конечно можно не использовать контрольную сумму, а дублировать структуру в нескольких местах энергонезависимой памяти
menzoda писал(а):если настроек много, то выходит очень накладно перезаписывать их все из-за изменения всего одного параметра.
А никак, только дублированием параметра. И то под вопросом. Если допустим поле length исказилось то вся система полетит. Получается дублировать FAT нужно, точнее резервный логический раздел создавать с известного фиксированного адреса.menzoda писал(а):но вылезают проблемы надежности, которые я не знаю как решить малой кровью.
Сб фев 23, 2013 20:23:50
uk8amk писал(а):Сколько тысяч раз в секунду пользователь желает изменять параметр чтоб начались тормоза системы?