Atmega8 запись / чтение переменной eeprom

Обсуждаем контроллеры компании Atmel.
Ответить
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Сообщение shads »

tom1101 писал(а):ни у кого из вас не возникало проблем с записью - оно ждет, пока память не будет свободна.
Но хорошо это или плохо? Плохо. И вот почему: если вдруг память не готова, наша программа зависнет в цикле, пусть и на чуть-чуть.
А я думаю - хорошо...

Обычная ситуация - запись нужна редко, например после изменения настроек, их надо запомнить. Вот нажали мы ENTER, ну и все нормально.... даже если проц на мгновение зациклится в процедуре записи, прерывания то продолжают работать, т.е. экран обновляется, кнопки опрашиваются. До обработки следующего нажатия не может пройти времени настолько мало, что проц видимую задержку создаст... А какие тут есть задачи, которые в этот момент проц непременно должен выполнять?

Другая ситуация - запись состояния при выключении питания. Ну тут тоже... чем процессору еще заниматься, кроме как ни записью в EEPROM.....

Конечно я не исключаю, что могут быть специфичные применения, где действительно нужна процессорная мощность, а не тупое ожидание.... НО это наверное не про нас.....
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 581
Зарегистрирован: Чт янв 15, 2009 18:57:12

Сообщение tom1101 »

shads писал(а):Обычная ситуация - запись нужна редко, например после изменения настроек, их надо запомнить. Вот нажали мы ENTER, ну и все нормально.... даже если проц на мгновение зациклится в процедуре записи, прерывания то продолжают работать, т.е. экран обновляется, кнопки опрашиваются. До обработки следующего нажатия не может пройти времени настолько мало, что проц видимую задержку создаст... А какие тут есть задачи, которые в этот момент проц непременно должен выполнять?
Ну, кому как. У меня, например, в прерываниях идет лишь необходимая деятельность, т.е. взвести флаг, изменить переменную статуса, сменить состояние ножек, если требуется моментальная реакция. Реагирует же на событие контроллер уже из основного цикла. И вот я такой вставляю стандартную процедуру записи и вместо полезной работы несколько тысяч циклов тупо висю. Не, меня жаба душит - написал свою реализацию, сэкономил 170 байт памяти. Но оно конечно опаснее - нельзя писать/читать, пока не проверишь состояние памяти.
Но для новичков стандартный функции, конечно, лучше - ошибку сделать невозможно, оно и подождет готовности, и атомарность соблюдет, и запись гарантирует - вызвал и забыл. Только вот где бы разжиться сишным листингом этих функций? Я никак не пойму, зачем там декременты/инкременты, если переменная адреса все-равно затирается при каждом вызове? Толи компилятор зачем-то сует, толи оно реально где-то прописано в этих функциях.
Надо будет у атмела скачать новую версию winavr, и глянуть там, а то все на версии 10-го года сидю, никак руки не дойдут.

Да, не про нас то не про нас, просто когда вижу такую неоптимальность, хочется исправить.
[img]http://ub.imgfiles.ru/2.png[/img]
Реклама
Ответить

Вернуться в «AVR»