PDA

Просмотр полной версии : Сохранение bool в файл



жекон
22.04.2015, 18:03
День добрый!Надоело менять аккумуляторы решил сделать запись в файл, сделал массив dword в нем в одну переменную упаковал bool, числовые переменные сохраняются без проблем, а вот дискретные ни в какую, что-то не могу сообразить почему, и еще вопрос а возможно вести запись файл постоянно или нет, просто у меня идет отсчет и надо что-бы после восстановления питания возобновилась работа с момента остановки

capzap
22.04.2015, 18:08
в файл пишется байтами, отводите на каждый буль по байту
и второе писать постоянно то зачем, записали состояние при пропаже питания и восстановили после

жекон
22.04.2015, 18:13
Т.е в каждой переменной дворд по 4 буля, а успеет записать без аккумуляторов порядка 50 переменных

capzap
22.04.2015, 18:41
не вижу препятствий упаковать все биты в тот же дворд и потом записать

жекон
22.04.2015, 18:54
да вот как раз и не хочет он так сохранять упаковываю запись проходит, после включения все числа на месте а биты на нуле

capzap
22.04.2015, 19:11
что значит биты на нуле, Вы же число записывали, это число обратно получаете?

Гарчев Евгений
22.04.2015, 19:32
День добрый!Надоело менять аккумуляторы решил сделать запись в файл, сделал массив dword в нем в одну переменную упаковал bool, числовые переменные сохраняются без проблем, а вот дискретные ни в какую, что-то не могу сообразить почему, и еще вопрос а возможно вести запись файл постоянно или нет, просто у меня идет отсчет и надо что-бы после восстановления питания возобновилась работа с момента остановки

Файл пишите по изменению значений, или по времени, или и так и так. Постоянно писать не надо, быстро "убьете" flash.
На счет булевых переменных - может они у Вас просто при включении питания инициализируются нулевыми значениями и перезаписываются в массив?

жекон
22.04.2015, 19:33
Да числа без проблем биты перед записью то-же установлены, а после числа в порядке а биты по нулям

capzap
22.04.2015, 19:46
Да числа без проблем биты перед записью то-же установлены, а после числа в порядке а биты по нулям

Вы понимаете что ерунду говорите, например упаковали Вы бит в 9 разряд WORDа, получилось число 1024, сохранили его в файл, потом прочитали файл число должно получится 1024 и значит бит тоже на месте, а если бит равен нулю, значит и число будет равно нулю. Ну и где Вы вводите в заблуждение, с битами или с числами?

жекон
22.04.2015, 19:46
Запись при включении заблокировано таймером на 1 минуту ,так что перезаписатся они не могут

жекон
22.04.2015, 19:50
Вы понимаете что ерунду говорите, например упаковали Вы бит в 9 разряд WORDа, получилось число 1024, сохранили его в файл, потом прочитали файл число должно получится 1024 и значит бит тоже на месте, а если бит равен нулю, значит и число будет равно нулю. Ну и где Вы вводите в заблуждение, с битами или с числами?
Понимаю но факт остается фактом, завтра попробую два архива создать один на числа другой на биты и скрины сделаю

capzap
22.04.2015, 19:52
может просто распаковывать не умеете

жекон
22.04.2015, 20:00
может просто распаковывать не умеете
В смысле чем распаковка отличается от упаковки?

smk1635
22.04.2015, 20:07
Понимаю но факт остается фактом, завтра попробую два архива создать один на числа другой на биты и скрины сделаю

Согласен с уважаемым capzap. Простой алгоритм же (упрощённо,для примера 8 переменных bool):
1. Берём ФБ PACK. Запаковываем в 8 bool в 1 WORD. Допустим получили 256.
2. Сохранили его в файл.
3. После считали это число из файла.
4. Взяли ФБ UNPACK. Завели не него наш WORD. На выходе получили биты как были при записи.

В чем проблема то ?

жекон
22.04.2015, 20:32
17871А что так не прокатит?

amn
22.04.2015, 20:36
Похоже не в битах дело, а скорее всего в программе где-то обнуляются значения. Чтобы убедиться в этом создайте две отладочные переменные. Одной из них перед строкой записи в файл присвойте значение сохраняемой переменной, а второй присвойте значение прочитанной переменной сразу после чтения из файла.

Попробуйте при первом включении не запускать основной код до тех пор, пока не прочитаются из файла сохраненные переменные.

smk1635
22.04.2015, 20:45
17871А что так не прокатит?

Честно говоря у меня было что не прокатывало. Не знаю почему, но было. Через ФБ работало.

Валенок
22.04.2015, 20:51
Раз есть траблы - значит где-то накосячили.

Понимаю но факт остается фактом, завтра попробую два архива создать один на числа другой на биты и скрины сделаю
Если 10й бит=1 то число >= 1024.
Число < 1024 то 10й бит=0
О каких фактах речь ? Вы не скрины, а код кладите. Что за дурацкая манера показывать картинки ?


Честно говоря у меня было что не прокатывало. Не знаю почему, но было. Через ФБ работало

Форум магов - не здесь. Если было что - значит чего-то не так сделали.

жекон
22.04.2015, 20:55
Ладно утро вечере мудренее, завтра посмотрим

smk1635
22.04.2015, 21:11
Форум магов - не здесь. Если было что - значит чего-то не так сделали.

Дык понятно что где то косяк был. Только так и не смог найти до сих пор. :D
А через ФБ всегда идет с первого раза.

amn
22.04.2015, 21:56
Дык понятно что где то косяк был. Только так и не смог найти до сих пор.
А через ФБ всегда идет с первого раза.

Может пригодится, тут уважаемый Валенок много полезного по этому поводу сказал http://www.owen.ru/forum/showthread.php?t=16275&p=130407&viewfull=1#post130407

smk1635
22.04.2015, 22:06
Может пригодится, тут уважаемый Валенок много полезного по этому поводу сказал http://www.owen.ru/forum/showthread.php?t=16275&p=130407&viewfull=1#post130407

Интересно, очень интересно. Спасибо за ссылку.
И спасибо конечно Валенку.