Сергей Соловьев, но при этом сама ОС постоянно что-то да записывает в эти участки памяти. Как это тогда работает? ОС в таком случае либо на время выключает состояние readonly или просто игнорирует сигнал? В общем, спасибо за наводку, почитаю про MPU
Да, я тупанул. Я думал, может есть какой-то механизм на уровне железа, который предотвращает запись в ту или иную область памяти. Но такой механизм выглядит нереальным. Либо это будет что-то типа ПЗУ, либо у кого-то да должен быть доступ, а в нашем случае это ОС.
GavriKos, память = [количество адресов] x [кол-во битов в одном адресе]
Тут просто обывателя сбивает с толку 4 ГБ, хотя вроде на моей 32-битной машине 16 гб памяти.
Под 4 ГБ подразумевают именно количество адресов (2^32) - простая комбинаторика. А вот сколько физической памяти на самом деле - зависит от кол-ва битов в одном адресе
Получается, что максимальное число памяти, доступное для 32-битной системы - 32 ГБ (2 ^ 32 * 64 bits, учитвая текущие стандарты, где размер данных не превышает 64 бита)
UPD:
Епта, оказывается в большинстве нами используемхы процессорах 1 байт используется для одного адреса. То есть действительно 4гб максимум
mayton2019, твой пример обращается к материальным сущностям.
В моем примере, тебя, наверное, смутил переход от абстракции в виде "Библиотека на Си" к конкретной (т.е. материальной) железке - микроконтроллеру. Получается, мне нужно добавить пару деталей: библиотека хранится в виде электронов в конкретной железке под названием "оперативная память", результатом работы которых являются такие же электроны, но уже в другой последовательности. Эта последовательность передается по проводу в микроконтроллер, в котором тоже работают электроны, и, реагируя на мои переданые электроны, вместе образуют новые (прошивку)
Теперь, надеюсь, у тебя не будет возникать вопросов
Вот именно что передать это значение, определенное просто как 0x04, как ссылку на память не получится, либо придется постоянно кастовать, что, я думаю, не поможет и неудобно
Я смотрел дефайны этих портов, там просто хекс-значение, без какого либо каста к volatile ссылке, видимо это делается непосредственно компилятором, поэтому я и подумал, что вариант с прокидыванием аргументов тоже должен сработать
skyazimuth, может быть аппаратная, ну как сказано в видео "пин чувствителен к внешним электронам, которые просто витают в воздухе, поэтому значение нестабильно". И две техники применяется: resistor pull-up/down https://www.youtube.com/watch?v=87X5Duad8CU
DDRD не надо указывать. По умолчанию оно 0.
Я уже решил проблему с помощью Resistor Pull-up. Можно включить его либо используя свой резистор, либо встроенный в ардуино с помощью PORTD = 1 << PORTD2;
Суть в том, что напряжение на пине нестабильно, и следовательно то 0 то 1, с помощью резистора я заставляю его принять 1, а когда нажимаю на кнопку, ток заземляется, и я получаю 0. И иду от обратного: 1 - выключи диод, 0 - включи. Оказывается, это общая проблема у всех новичков, уже не первое видео на ютубе нашел. Одно из них в комментариях к вопросу
Да ничего я не решил, я электроникой занимаюсь 2 дня, что я там должен знать :) Пойду гуглить, что такое осциллограф
Я уже нашел и расписал причину такого поведения в комментариях к вопросу
Даниил Гладыш, да там проблема была в так называемом floating pin, чье значение то 0, то 1. Техника такая: используем resistor pullup, гарантируя постоянную подачу тока, а паралельную часть заземляем , и в коде считаем от обратного: если 1, то выключаем диод, иначе включаем https://www.youtube.com/watch?v=G_i1ZhadTa0
Я так понимаю, на начальных этапах мне просто нужно покупать готовую материнскую плату (если это так называется) с припаяным микроконтроллером? И уже через пару годиков можно и самому что-то собирать