Байтоёбства псто

Jun 20, 2021 12:49

Меня тут жизнь заставила потрогать компилятор XC8 от майкрочипа для мелких контроллеров. Это, я вам скажу, целый отдельный мир в себе. Зато я теперь понимаю, откуда на форумах тонны говнокода с двоичными или шестнадцатиричными константами, а разбуженный внезапно ночью пикоман будет бормотать что-то типа "0xA8 в регистр 0xBB включает режим синхронизации SPI по переднему фронту". Они, мать их, похоже что учат эти константы, потому что иначе никак.

Трудности начинаются с самого начала - с доступа к периферийным регистрам. Суть в том, что нормальные люди не пытаются изобретать колёса от велосипеда и тупо перечисляют в заголовочных файлах битовые маски и смещения, что приводит к самоочевидному коду типа "CTRL_A = (1<
Но это нормальные люди. Пикоманы же пытаются сделать "удобно" и делают промежуточные структуры с битовыми полями. Тот же код будет выглядеть как "CTRL_A.option1=1; CTRL_A.option2=1;", но при этом, как всегда, есть нюанс - каждый бит будет ставиться отдельной инструкцией. Семь бит - семь команд.

И вот тут мне жалко не памяти и не машинных тактов - при таком подходе упускается из виду тот простой факт, что разные биты в регистре контролируют разные части периферии, и зачастую (как правило всегда) должны быть записаны одновременно. Иначе привет разные глитчи, баги и взбрыки самых разных форм цветов и размеров, просто потому что пока мы по одному пишем остальные биты, уже инициализированная часть периферии начинает себе там что-то думать или даже действовать.

Альтернатива? Конечно есть. Можно записать целиком слово в регистр, для этого надо посмотреть в даташит, выяснить позицию нужных битов, просуммировать это всё у себя в голове и написать простую и понятную команду:

CTRL_A = 0xA6;
Ну, или, для эстетов

CTRL_A = 0b00100010;

Пикоманы, как есть пикоманы.

This entry was originally posted at https://ex0-planet.dreamwidth.org/99602.html. Please comment there using OpenID.

rant, программизм, терминальное

Previous post Next post
Up