1

Тема: Использование энергонезависимой памяти

Может кому пригодится.
Мне тут понадобилось сваять однократно конфигурируемую железку, дабы сэконмить время на заливке разных прошивок в контроллер, ну и сделать одну прошивку для разных вариантов исполнения.
Режим работы выбирается один раз, для выбора перемыкаются канал 0-1 или 2-3 или 4-5, после записи в ячейку памяти входы деактивируются. В дальнейшем программа ориентируется на выходы блока N14 - его поставил скорее для иллюстрации.
http://forum.canny.ru/files/oldpic/e6d30c83-b227-4e6b-bda8-3ff174dd8f56.jpg

2

Re: Использование энергонезависимой памяти

Идея и реализация алгорима интересные. А я позволю себе немного позанудствовать: если неподключенные нулевые входы блоков 5-10 задать константой "Конфигурация каналов ввода-вывода" -> "Стандартные настройки"  -> "Нейтральное состояние", то результат работы диаграммы будет тем же самым (так как значение этой константы = 0), однако диаграмму, как мне кажется, будет немного проще читать.
В защиту же вашего варианта с неподключенными входами могу сказать, что он исполнится контроллером немного быстрее.
Этот комментарий ни в коем случае не является поводом что-либо менять в вашей диаграмме.
Спасибо за то, что делитесь своим наработками!

3

Re: Использование энергонезависимой памяти

Да, я посмотрел значение которое присваивается в нейтральном состоянии - 0, решил что и так работать будет, хотя согласен незавершенность есть smile.
Как позже подумалось, эти каналы (1-6) можно использовать после конфигурации и для других целей достаточно определить неподключенные входы коммутаторов, так как они должны работать в нормальном режиме. Ведь когда ячейка 00 заполнена ненулевым значением выходы коммутаторов будут всегда замкнуты на  "вход 0".

4

Re: Использование энергонезависимой памяти

Уважаемые коллеги, у меня вопрос: насколько я понимаю, блок № 11 на диаграмме будет записывать в ЭНП какое-то число на КАЖДОМ цикле выполнения программы. Предполагаю, что максимально возможное  количество циклов перезаписи ЭНП должно быть ограничено?! Если это так - то, учитывая очень высокую скорость работы контроллера, через несколько секунд записать данные в ЭНП будет невозможно! Или запись в ЭНП работает по другому? И можно ли сделать так, чтобы данные в ЭНП писались только по условию, а не на каждом цикле выполнения программы?

5

Re: Использование энергонезависимой памяти

Совершенно справедливый вопрос. От неминуемого исчерпания ресурса энергонезависимой памяти нас спасает то, что запись в нее осуществляется не напрямую, а под контролем драйвера встроенного в системное программное обеспечение контроллера. Драйвер выполняет несколько функций, одна из которых состоит в контроле текущего значения хранящегося в ячейке энергонезависимой памяти перед ее записью. Если мы желаем записать то же самое значение что там и хранится, драйвер просто не станет этого делать, так как в результате такой операции ничего не изменится.
Показанный на данной диаграмме способ записи в энергонезависимую память, через детектор фронта и коммутатор 2-в-1, является не единствено возможным, но вполне корректным и рекомендуемым для применения.

6

Re: Использование энергонезависимой памяти

Исчезла функциональная схема.
Можно ли поправить?
 

7

Re: Использование энергонезависимой памяти

поправил.

8

Re: Использование энергонезависимой памяти

Спасибо, разбираюсь.

9 (12-05-2015 12:04:30 отредактировано Arhimed)

Re: Использование энергонезависимой памяти

Как отрекомендуете делать запись в ЭНП, по событию (например заднему фронту кнопки) или вариант как на картинке тоже пригоден?

Вложений в сообщении

ЭНП.png, 17.55 кб, 777 x 218
ЭНП.png 17.55 кб, скачивался 399 раз, последний раз 2015-05-12 

10

Re: Использование энергонезависимой памяти

Вариант на картинке вполне работоспособен и будет успешно сохранять в энергонезависимую память состояние выхода Т-триггера. Системное ПО контроллера оптимизирует запись в энергонезависимую память - если записываемое значение равно хранящемуся, то запись не производится.