Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

не доработка #1

Open
AlxuMuk opened this issue Nov 7, 2020 · 2 comments
Open

не доработка #1

AlxuMuk opened this issue Nov 7, 2020 · 2 comments

Comments

@AlxuMuk
Copy link

AlxuMuk commented Nov 7, 2020

Зачем постоянно записывать в eeprom значение громкости ( с каждым изменением значения) так eeprom убить быстро можно

void showVolumeLine(int inc)
{
if (dacRegister.currentType != SETTING_TYPE_VOLUME) {
dacRegister.currentType = SETTING_TYPE_VOLUME;
initVolumeLine();
}

if ((dacRegister.volume == 0 && inc == -1) || (dacRegister.volume == VOLUME_MAX_SIZE && inc == 1)) {
return;
}

unsigned int pos = dacRegister.volume / CHAR_WIDTH;
unsigned int mod = dacRegister.volume % CHAR_WIDTH;

if (mod > 0 && inc == -1) {
mod += inc;
showOneElement(pos+8, mod);
} else if (mod == 0 && inc == -1) {
showOneElement(pos+7, 4);
} else if (mod == 0 && inc == 1) {
showOneElement(pos+8, 1);
} else if (inc == 1) {
mod += inc;
showOneElement(pos+8, mod);
}

dacRegister.volume += inc;
saveRegisters();
dspAdau1452SetVolume(DSP_SUBADDRESS_VOLUME_LEFT, dacRegister.volume, dacRegister.balance);
dspAdau1452SetVolume(DSP_SUBADDRESS_VOLUME_RIGHT, dacRegister.volume, dacRegister.balance * -1);
}

saveRegisters(); Тут совсем не нужен, ушел в сон сохранил.

@alex-frolov
Copy link
Owner

Для моего сценария использования: изменение параметров - больше эпизодически.
Уход в сон довольно редкий кейс, выключение питания общим рубильником для всей системы, при таком отключении запись изменившихся значений затруднена.
Единственный выход, который более менее - сохранять, только когда есть изменения + задержка с сохранением изменений, скажем раз в 5-10 секунд, то есть отправили запрос на изменения, и сама запись в eeprom будет не чаще раза в 5-10 секунд.

@AlxuMuk
Copy link
Author

AlxuMuk commented Nov 9, 2020

Для моего сценария использования: изменение параметров - больше эпизодически.
Уход в сон довольно редкий кейс, выключение питания общим рубильником для всей системы, при таком отключении запись изменившихся значений затруднена.
Единственный выход, который более менее - сохранять, только когда есть изменения + задержка с сохранением изменений, скажем раз в 5-10 секунд, то есть отправили запрос на изменения, и сама запись в eeprom будет не чаще раза в 5-10 секунд.

Так и сделал ,поставил записать в память после изменения значения но не раньше 3 сек.

void saveRegisters()
{
// если флаг поднят и с последнего изменения прошло 3 секунд (3 000 мс)
if (eepromFlag && (millis() - eepromTimer >= 3000) ) {
eepromFlag = false; // опустили флаг
EEPROM.put(eeAddress, dacRegister);
Serial.println("Save EEPROM");
}
}

в void showVolumeLine(int inc) добавил
eepromFlag = true; // поднять флаг для записи EEPROM

void pressOffButton()
eepromFlag = true; // поднять флаг для записи EEPROM

ну и в if (lastActivityMls + RETURN_TO_VOLUME_TIME < millis()) {
eepromFlag = true; // поднять флаг для записи EEPROM

Дальше пока не делал.

Спасибо за работу вам )))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants