EEPROM Работа с битами
- Войдите на сайт для отправки комментариев
Сб, 18/04/2015 - 00:28
Добрый день подскажите молодому
Необходимо записывать, хранить и считывать 6 битовых состояний , теоретьчески можно задействовать 6 адресов, но это не наш метод. Думаю в 1 адрес записывать и читать переменную , а в коде программы разлажиать в масив Boolean. И также собирать для записи.
Подскажите плиз как это сделать правильно, а главное эстетично. По возможности пример, или подробно для чайника, зарание благодарен.
Не получится. Тип boolean занимает целый байт в памяти false = 0, true = 1...255.
http://www.arduino.cc/en/Reference/BooleanVariables
http://www.arduino.cc/en/Reference/Constants
IUS, я лично не понял что имел ввиду x-dron, может я сам не правильно понял? У вас есть например 6 портов, и вы хотите записывать их состояние в еепром, уместив всё в один байт? Это можно, и нужно именно так делать. Специально для начинающих есть команды BitRead и им подобные.
Я думал про самое простое решение -
Вот оно работать не будет.Массив из 8-ми boolean занимает не один, а 8 байт.
А вот запихивать и считывать биты bitSet() (или просто кодированием по степени двойки) и bitRead() действительно можно.
Или, ещё, можете почитать про Битовые поля в C++
Если понравится - пользуйтесь.
Работа с битами, хоть в EEPROM, хоть в ОЗУ флеше или в портах отличается только операцией чтения и записи. Основа же одинакова. Все верно тип BOOL занимает в случае с ардуино один байт, поскольку это восьмиразрядный процессор. Был бы 16 разрядный тип занимал бы одно слово - 16 бит. Но это вовсе не значит, что мы не можем оперировать битами, в том числе и для хранения логических состояний. К тому же си язфк в котором всегда одну задачу можно решить уймой способов. Например bitRead и bitSet, или используя длгические битовые операции. Но есть способ для тех кому лень заморвчиваться со светрыванием и развертыванием данных, давайте доверим это компилятору и объявим вот такую структуру:
Теперь используя этот тип объявим переменную
Ну а дальше сами разберетесь :)
Хыыыы... опередили :)
Да, это то, что нужно. Всем огромное спасибо, щас разберусь
Тоже сейчас наткнулся на это и встал вопрос:
С чтением битов из eeprom проблем нет, пример:
А вот как записать в eeprom бит через bitWrite?
строчка такого типа не работает:
я в ступоре
И чтение и запись в EEPROM осуществляется только байтами. Там, где Вам кажется, что Вы считали бит, на самом деле Вы считали байт и выделили из него нужный бит.
Аналогично нужно поступать и при записи: читаете байт, устанавливаете в нем нужный бит в нужное состояние и записываете байт обратно.
т.е. пишу байт из eeprom в локальную переменную, меняю её и записываю обратно в eeprom?
Спасибо, выручили =) Может кому пригодтся :