// ================================================== ==========
void OSD_write_to_screen(const char s[], byte x, byte y, byte blink, byte invert){ //создание функции OSD_write_to_screen
// с параметрами(числовая константа "s", байт "x", байт "y",байт "blink", байт "invert")

unsigned int linepos; //создание "linepos" без знаковой переменной
byte local_count; //создание байта "local_count"
byte settings, char_address_hi, char_address_lo; //создание байт "settings, char_address_hi, char_address_lo"
byte screen_char; //создание байта "screen_char"

local_count = 0; // Присвоение байту "local_count" значения "0"

char_address_hi = 0; // Присвоение байту "char_address_hi" значения "0"
char_address_lo = 0; // Присвоение байту "char_address_hi" значения "0"

linepos = y*30+x; // Присвоение байту "linepos" значения выражения "y*30+x" Где берутся значения для "x" и "y"

char_address_hi = linepos >> 8; // Присваивается байту "char_address_hi" значения 2х байтовой переменной "linepos".
// Вот это ">>" означает, что значение не может быть более 8 бит?
char_address_lo = linepos; //Присваивается байту "char_address_lo" значения 2х байтовой переменной "linepos"
// Я понимаю, что ждя MAX надо переслать два байта информации (старший байт и младший байт), видимо они и именуются тут
// "char_address_hi, char_address_lo". Подозреваю, что двухбайтный "linepos" содержит этот адрес из двух байт, но синтаксиса не понимаю.
settings = B00000001; // Присвоение байту "setting" значения в восьмеричной "B00000001" это 1 в десятичной

if (blink) { // если "значение параметра "blink"" - условие? условие чего, наличия параметра?
settings |= (1 << 4); //выполнить байт "setting" не равен выражению "(1 << 4)"
}

if (invert){ // если "значение параметра "invert"" - условие? условие чего, наличия параметра?
settings |= (1 << 3); //выполнить байт "setting" не равен выражению "(1 << 3)"
}


Попытался пошагово прокомментировать, чтобы понять для себя. поправьте, где ошибся пожалуйста.