Биты и байты
Бит - словно переключатель с фиксацией, который может быть только в двух состояниях: 0 и 1.
Байт - это набор из 8 бит.
Минимальное число, которое можно сохранить в байте 0 (все биты в состоянии 0) максимальное 255 (все биты в состоянии 1) итого 256 возможных значений.
Грубо говоря, байт выглядит вот так:
Соответственно возникает вопрос:
-- Как используя только 8 переключателей получить число 255 или 65?
Теперь посмотрим на вот такую схему:
Как мы знаем, ёмкость конденсаторов при параллельном включении суммируется, то есть если мы включим параллельно конденсатор на 1 микрофарад и конденсатор на 2 микрофарада то суммарная их ёмкость будет 3 микрофарада.
По сути в нашем аналоге байта используя только 8 переключателей и 8 конденсаторов мы можем "записать" любое целое число микрофарад от 0 (все переключатели разомкнуты) до 255 (все замкнуты).
Например нам надо 65 микрофарад - мы замыкаем выключатель "бит0" и "бит6" ёмкости 1 и 64 суммируются и мы имеем 65 микрофарад.
К слову сказать: ЦАП (цифро-аналоговый преобразователь) примерно так, только оперируя резисторами и получая на входе байты, создаёт соответствующие этим байтам напряжения на своём выходе.
Биты в байте, в плане изменения их значений, между собой никак не связаны, мы можем перевести бит 5 в состояние 1 и при этом состояние бита 6 и 4 никак не изменятся.
"Записать байт" - это означает: изменить состояние сразу всех 8 бит.
Большинство команд процессоров и микроконтроллеров работают с байтами целиком, а в некоторых процессорах и сразу по 2 или 4 или даже 8 байт, соответственно это:
8-ми битные процессоры (большинство его команд работают с 1 байтом);
16-ти битные процессоры (большинство его команд работают с 2 байтами);
32-ти битные процессоры (большинство его команд работают с 4 байтами);
и так далее.
Но в любом процессоре есть команды, для изменения любого отдельного бита не трогая другие.
Адреса, адресное пространство памяти и портов вода-вывода
Сами по себе байты могут хранить целые числа от 0 до 255, но ведь человеку нужно хранить и большие числа и много разных чисел.
Как быть?
Собрать много байт в группу.
Однако, если мы сложим несколько байт друг за другом, словно костяшки домино, нам нужно будет как то разбираться в какой байт мы запишем какое число, для этого существуют адреса.
Грубо говоря - адреса, это переключатели, которыми выбирают нужный байт, если представить это в виде упрощённой схемы то будет примерно так:
Соответственно переключатели "Адрес" с зависимой фиксацией, то есть если включен "Адрес 0" то все другие переключатели адреса выключены, если включен "Адрес 1" то все другие тоже выключены и так далее.
Таким образом выбрав какой то адрес мы получаем доступ к указанному этим адресом байту.
Память
Память - это набор байт расположенных друг за другом и подключенных к схеме их выбора с помощью указания адреса байта.
По крайней мере, в любом компьютере или микроконтроллере, основанном на фон Неймановской архитектуре (а это всё что стоит у нас на столах, под столами, впаяно в различные устройства).
Память начинается с адреса 0 и уходит "вниз" до своего максимального адреса, например в микроконтроллере с 13 байтами памяти конечный адрес будет 12 (не забываем считать ноль, а то можно подумать что последний байт имеет адрес 13).
Визуально это можно представить так:
Байты памяти, в плане изменений их значений, между собой никак не связаны и записывая в байт с адресом 0 число 157 мы не меняем числа в других байтах.
Память бывает:
• Постоянная (ПЗУ)
• Оперативная (ОЗУ)
Постоянная - это та, значения байт в которой компьютер не меняет постоянно, у микроконтроллеров например там находится программа, которую и выполняет процессор микроконтроллера. Информация в постоянной памяти не обнуляется при отключении питания, но постоянная имеет ограниченное число возможностей изменения в ней значений байт и гораздо медленнее изменять в ней значения (если вообще возможно).
Оперативная - та память, которую микропроцессор изменяет весьма часто, в её байтах например бегут значения счётчиков, скажем, часы, минуты и секунды, если на микроконтроллере сделаны часы. Оперативная память, как правило, обнуляется при отключении питания, но имеет не ограниченное число изменений значений её байт и огромные скорости внесения изменений (миллионы раз в секунду и более).
В настоящее время постоянная память отличается только по назначению от оперативной, потому что если раньше надо было пол часа светить ультрафиолетом в окошко микросхемы постоянной памяти, потом уже её вставлять в программатор, который требовал 25 вольт напряжения, то сейчас есть FLASH память, которая стирается и перезаписывается при напряжении 3 вольта или даже меньше, за считанные доли секунд, да и ограничения по числу записей/стираний байта измеряется сотнями тысяч.
Надеемся с основными принципами работы памяти и хранения информации мы разобрались, теперь перейдём к конкретике на примере микроконтроллеров, для примера, ATtiny13.
ATtiny13 содержит:
1024 байта (1 килобайт) постоянной памяти (в описании контроллера это: Programmable Program Memory Flash) которая может быть перезаписана до 10 тысяч раз (то есть 10 тысяч раз можно поменять программу по которой работает процессор микроконтроллера).
64 байта оперативной памяти (в описании контроллера это: SRAM).
Так же в состав этого микроконтроллера входит 64 байта флеш-памяти (в описании контроллера это: EEPROM), данные в которой как и в любой флеш памяти не теряются при выключении питания (может быть использована например для хранения установок вашей программы), её можно перезаписывать 100 тысяч раз.
Для первого раза достаточно.
Позднее, я выкрою время и постораюсь описать, как работают процессоры, то есть та часть компьютеров или микроконтроллеров, которая умеет изменять память, заниматься сложением чисел, вычитанием, сравнением, их АЛУ (арифметическое-логическое устройство).
|