Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
сравнить два регистра и определить равны они или нет. В этом случае нам необходимо значения регистров подвергнуть операции XOR
if (PORTA==24) {do some code;}При этом меня слабо волнует, какой там набор инструкций у камня, и как компилятор это раскроет. По крайней мере, до тех пор, пока я не захочу строгий реалтайм…
Плохо что не интересуетНе понимаю, о чем вы.
Под словом регистр обычно и понимаются РОНА это — культурозависимо. Везде принято разное. А то, вы так возмущаетесь, как будто бы назвать регистр порта регистром это что-то плохое. В окружающей меня культуре регистр это просто массив бит, реализованный в железе с известным способом доступа (ну там сдвиговые регистры и что угодно еще).
Прямое подключение АЛУ с регистрами периферии создаёт больше проблем и трудностей чем решает.Полнотью с этим согласен — потому и не применяется. По сути, оно ломает модульность архитектуры. Но я лишь хочу показать, что отсутствие таких реализаций не является каким-то фундоментальным правилом.
должно же быть какое-то однообразие в терминологии чтобы отличать РОН от регистров периферии и т.д.Все правильно. Аббревиатура РОН для этого и существует. Я лишь хотел сказать, что текст автора полностью архитектуронезависим и не содержит ни строчки кода. Нет абсолютно ни какой возможности предполпгпть, о каких регистрах речь, и почему он вообще употребил там слово «регистр», когда «байт» было бы уместнее. Тк текст, по сути, про математику, а не про микроконтроллеры.
Кстати интересный факт. В ассемблере AVR есть псевдокоманда CLR rx обнуляющая регистр, а на самом деле КОП у неё такой же как у XOR rx, rx.
Спасибо за публикацию, непременно пишите ещё!
Вы забыли главное — зачем это всё? Дополните, как пользоваться масками, выделять, маскировать биты. Бытовые операции в подавляющем большинстве случаев ведь используются для этого. Если нет — могу я натоптать.
LED_PORT &= ~(1<<LED2);
LED_PORT |= 1<<LED2;
LED_PORT ^= 1<<LED2;Возможно, я не совсем точно выразился. У вас упущен момент почему так происходит (или я его при беглом чтении мог пропустить).
Как выделить часть байта?
flags = byte & 0x30;
Почему так происходит?
x & 0 = 0
x & 1 = xТаким образом
xxxx xxxx
& 0011 0000
--------------
00xx 0000С пояснениями, и добавить для ИЛИ, почему на нём инвертируется маска.
Начинаем изучать STM32: битовые операции