FLProg
Вход на сайт
Логин:
Пароль:
Мы в VK
Поиск
Статистика


Яндекс.Метрика
Пятница, 09.12.2016, 16:29
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход

Поиск по сайту


Форум
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 212»
Модератор форума: support, Сергей 
Форум » Основной » Спросить у знатоков » Процедура правильной записи переменной в EEPROM.
Процедура правильной записи переменной в EEPROM.
Max
Дата: Понедельник, 18.07.2016, 18:46 | Сообщение # 1
Гуру
Группа: Проверенные
Сообщений: 484
Награды: 14
Репутация: 4
Статус: Offline
Идея и логика такая.
Общее описание. Нужно записать переменные типа int в значения таймера переменных пользовательского блока таймера, т.е. значение времени начала отсчета и конца отсчета. И дабы не зависеть от потери питания,  эти переменные надо занести в EEPROM и при восстановлении питания, соответственно, таймер будет работать дальше считав ранее записанные значения из EEPROM.

Отправляю с телефона команду на установку нужного времени. Далее, получаю переменную типа string от модема SIM800L с командой, далее разбираю строку (в теле сообщения есть код-ключ команды, напр. 1234 и далее время, напр. 09 часов - 123409 для начала отсчета и, например 432122, 22 часа, для конца отсчета). Преобразую в int для занесения в память EEPROM.
Т.к. у меня принимающий (мастер) и получающий (слейв) модули общаются по радиоканалу (NRF24), то отсылаю эту команду дальше по радиоканалу с мастера на слейв, в слейве находится блок таймера+часы и там же и надо сохранить в EEPROM.

Незадача в том, как правильно записать эти переданные значения часов в EEPROM? Еще, при перезагрузке мастера в слейве записываются нули...
Как же сделать так, что бы в EEPROM записывались только нужные данные по команде и другие посторонние данные не записывались?

Добавлено (18.07.2016, 18:46)
---------------------------------------------
Подниму ка темку!

Дополню проектом.

Ни как не получается независимо для каждого значения сохранять переменные...
Прикрепления: NRF_UNO_Client_.rar(207Kb)


Максим (VK - Максим Дунаевский)

Сообщение отредактировал Max - Вторник, 19.07.2016, 19:19
 
rw6cm Дата: Среда, 20.07.2016, 10:45 | Сообщение # 2
Генерал-майор
Группа: Проверенные
Сообщений: 480
Награды: 44
Репутация: 32
Статус: Offline
Цитата Max ()
Ни как не получается независимо для каждого значения сохранять переменные...
Не знаю что не получается, так как воссоздать полную схему не возможно.
Но в том что выложили бардак ))
Инфо на дисплее не влазит, и друг на друге, не пойми что.
какие то не нужные перекодировки.
в общем при нормальной правильной посылке должно все работать.
думаю сообразите.
Прикрепления: NRF_UNO.rar(213Kb)


PC, E8400, 3.5Gb, Win7-32, ver.FLP(portable)

Сообщение отредактировал rw6cm - Среда, 20.07.2016, 10:47
 
Max Дата: Среда, 20.07.2016, 10:55 | Сообщение # 3
Гуру
Группа: Проверенные
Сообщений: 484
Награды: 14
Репутация: 4
Статус: Offline
Цитата rw6cm ()
Инфо на дисплее не влазит, и друг на друге, не пойми что.
Да это просто макет.
На дисплей вывел, для наглядности. Проблема в том, что не получается из строчной переменной (string) записать значение в EEPROM.
Т.е. из строки вылавливается, преобразую в int, но не записывается в память, т.е. не сохраняет. Если, приходят новые данные, то стираются (просто ноль в переменной получается) ранее записанные данные.
Задача то вроде простая, записать нужный участок строки в EEPROM и в последующем что бы там эти данные сохранялись не реагируя на другие полученные данные. Если, надо поменять, то только по коду (допустим строка 123455520) из неё надо сохранить только 20 (то, что в конце) и изменять можно только получив код, например: 123455519. Соответственно 20 меняется на 19...

Да, еще, при работе с EEPROM часто программа вылетает. Ужа в багтрекере Сергей написал. У меня так же...


Максим (VK - Максим Дунаевский)

Сообщение отредактировал Max - Среда, 20.07.2016, 11:02
 
rw6cm Дата: Среда, 20.07.2016, 11:10 | Сообщение # 4
Генерал-майор
Группа: Проверенные
Сообщений: 480
Награды: 44
Репутация: 32
Статус: Offline
Это понятно, но пока разобрался убил время.
С EEPROM надо аккуратней)), не нужно копировать, если удалили создавайте с новым именем.
От эмулятора по кнопке измененный проект работает, дальше сами.


PC, E8400, 3.5Gb, Win7-32, ver.FLP(portable)
 
Max Дата: Среда, 20.07.2016, 11:17 | Сообщение # 5
Гуру
Группа: Проверенные
Сообщений: 484
Награды: 14
Репутация: 4
Статус: Offline
Цитата rw6cm ()
От эмулятора по кнопке измененный проект работает, дальше сами.

Вечером посмотрю. Спасибо. Если, будут вопросы, то опять задам...

Добавлено (20.07.2016, 11:17)
---------------------------------------------

Цитата rw6cm ()
если удалили создавайте с новым именем.

Т.е. надо менять имя для переменной внутри EEPROM? И это каждый раз, может не работать?


Максим (VK - Максим Дунаевский)
 
rw6cm Дата: Среда, 20.07.2016, 11:27 | Сообщение # 6
Генерал-майор
Группа: Проверенные
Сообщений: 480
Награды: 44
Репутация: 32
Статус: Offline
Цитата Max ()
Т.е. надо менять имя для переменной внутри EEPROM? И это каждый раз, может не работать?
Не было времени разобраться.
Но в вашем проекте мне не удалось в ячейки памяти что либо записать,
Попытался скопировать на новую плату, чтоб разобраться, прога вылетела.
хотел создать заново эти ячейки, опять вылет.
Удалил память сделал по новой с новыми именами все пошло. хз что может быть
Но запись в ячейки пошла после коррекции проекта. в вашем варианте не идет.

Хотя сейчас загрузил по новой ваш проект, отключил плату NRF, вместо нее подкинул эмулятор,
оставил нужную инфо на дисплей, попробовал залить, - заругался на 1wire (в прошлый раз не ругался)
Удалил массив кинул датчику адрес в ручную, - все пошло,  запись заработала и вашем варианте. wacko
Прикрепления: NRF_UNO1.rar(212Kb)


PC, E8400, 3.5Gb, Win7-32, ver.FLP(portable)

Сообщение отредактировал rw6cm - Среда, 20.07.2016, 12:38
 
Max Дата: Четверг, 21.07.2016, 18:11 | Сообщение # 7
Гуру
Группа: Проверенные
Сообщений: 484
Награды: 14
Репутация: 4
Статус: Offline
Цитата rw6cm ()
в общем при нормальной правильной посылке должно все работать.думаю сообразите.

В принципе работает... Конечно, ваш вариант почти не отличается от моего, разве что конвертация при непосредственной записи в ЕЕПРОМ...
НО, иногда, не смог понять почему, не записывается и затирая старые данные просто нулем... хотя, строка с командой приходит....
через несколько секунд повторно посылаю ту же команду, то записывает... парадокс какой то... нет стабильности и четкости в записи...


Максим (VK - Максим Дунаевский)

Сообщение отредактировал Max - Четверг, 21.07.2016, 18:15
 
rw6cm Дата: Четверг, 21.07.2016, 18:38 | Сообщение # 8
Генерал-майор
Группа: Проверенные
Сообщений: 480
Награды: 44
Репутация: 32
Статус: Offline
Цитата Max ()
нет стабильности и четкости в записи...
Что то в момент записи забирает прерывание на себя.
Попробуйте на момент записи отключать не нужные циклы.


PC, E8400, 3.5Gb, Win7-32, ver.FLP(portable)
 
Max Дата: Суббота, 23.07.2016, 22:11 | Сообщение # 9
Гуру
Группа: Проверенные
Сообщений: 484
Награды: 14
Репутация: 4
Статус: Offline
Цитата rw6cm ()
Попробуйте на момент записи отключать не нужные циклы.

Убрал контрольные блоки... Остальное все нужно. Но, так и остались провалы в записи EEPROM...

Буду дальше смотреть.

Как будто, то принимает строку нормально один раз, то, другой раз, так же принимает, но не до конвертирует что ли....

Либо, в некоторые моменты цикла строка приходит в "неудобный" момент и запись не получается... Еще, есть некоторые подозрения на блок NRF24, возможно в нем какая то засада, хотя вижу пришедшую строку...


Максим (VK - Максим Дунаевский)

Сообщение отредактировал Max - Суббота, 23.07.2016, 22:33
 
Skull Дата: Воскресенье, 24.07.2016, 08:54 | Сообщение # 10
Подполковник
Группа: Проверенные
Сообщений: 299
Награды: 5
Репутация: 2
Статус: Offline
Если много строковых переменных иногда срывается стек. не только EEPROM пишется через раз, но и вывод в UART происходит странно- то строки недоскладывает, то вообще точку выводит
 
rw6cm Дата: Воскресенье, 24.07.2016, 13:30 | Сообщение # 11
Генерал-майор
Группа: Проверенные
Сообщений: 480
Награды: 44
Репутация: 32
Статус: Offline
Цитата Max ()
Убрал контрольные блоки... Остальное все нужно. Но, так и остались провалы в записи EEPROM...
Тяжело гадать, когда нет NRFки под рукой ))
Может попробовать сделать запись с задержкой, допустим в пол секунды,
допустим так:

Хорошо бы перед записью отключать NRFку, но походу такой функции в блоке нет.
Прикрепления: 6728400.png(33Kb)


PC, E8400, 3.5Gb, Win7-32, ver.FLP(portable)
 
Max Дата: Понедельник, 25.07.2016, 06:16 | Сообщение # 12
Гуру
Группа: Проверенные
Сообщений: 484
Награды: 14
Репутация: 4
Статус: Offline
Продолжаю мучить свой проект...
Как выше я писал, недозаписывает, или недоконвертирует, хотя строка с командой с сервера приходит полностью.
Обратил внимание на следующее. Вот отправил команду. Строка пришла на слейв, пришло допустим 123466623 должно было записаться "23" (то, что в конце), а записалось только "2", а "3" не записалось (а иногда записывается нормально!), или записывает просто "0"! Но стоит на слейве нажать кнопку перезагрузки Ардуино, как нужное число записывается нормально (!) (на мастере переменная записывается по команде "запись переменной" и поэтому, как бы висит в эфире пока не придет другая переменная).

Цитата rw6cm ()
Может попробовать сделать запись с задержкой, допустим в пол секунды,допустим так:

Пробовал, не проходит. Еще хуже...


Максим (VK - Максим Дунаевский)

Сообщение отредактировал Max - Понедельник, 25.07.2016, 06:27
 
rw6cm Дата: Понедельник, 25.07.2016, 13:47 | Сообщение # 13
Генерал-майор
Группа: Проверенные
Сообщений: 480
Награды: 44
Репутация: 32
Статус: Offline
Сделайте еще так:

Прикрепления: 1009750.png(30Kb)


PC, E8400, 3.5Gb, Win7-32, ver.FLP(portable)

Сообщение отредактировал rw6cm - Понедельник, 25.07.2016, 13:56
 
Max Дата: Понедельник, 25.07.2016, 17:00 | Сообщение # 14
Гуру
Группа: Проверенные
Сообщений: 484
Награды: 14
Репутация: 4
Статус: Offline
Цитата rw6cm ()
Сделайте еще так:

Делал уже так. Как раз так, чаще всего записывает правильно... Но, не всегда.... Уже руки опускаются, хоть на ModBUS переходи.... Но нужно именно беспроводный канал...
Чертовщина какая то...
Либо, обработать на стороне сервера и послать уже готовое значение в в виде int на слейв...


Максим (VK - Максим Дунаевский)
 
rw6cm Дата: Понедельник, 25.07.2016, 23:55 | Сообщение # 15
Генерал-майор
Группа: Проверенные
Сообщений: 480
Награды: 44
Репутация: 32
Статус: Offline
Попробовать упростить до минимума, без дополнительных переменных.


Как вариант прикрутить в конце посылки пару не нужных цифр,
и посмотреть как будет.
Со скоростью передачи между NRF думаю экспериментировали.
С технической стороны надеюсь все "чикичики" (Развязка, стабильность питания, короткие провода и т д)

п/с Хотел себе выписать NRF-ки - чувствую можно не спешить biggrin
Прикрепления: 3471206.png(12Kb)


PC, E8400, 3.5Gb, Win7-32, ver.FLP(portable)

Сообщение отредактировал rw6cm - Вторник, 26.07.2016, 00:07
 
Форум » Основной » Спросить у знатоков » Процедура правильной записи переменной в EEPROM.
Страница 1 из 212»
Поиск:

FLProg © 2016
Яндекс.Метрика