Martian, Мы такое сделали, правда на СТМ Бейсиковская команда (точнее, функция) LOG(X) реально компилируется в 2 байта - байт команды и байт - номер временного регистра. Но под капотом виртуальной машины честный флоатный логарифм на сях )))
AQ29, ваш целочисленный логарифм на АБ/ассемблере тоже применим. Что б не изобретать велописеды на асме. Но зочем вы говорите за свой асссемблерный код в теме про язык Си?
Martian писал(а):
или есть где посмотреть?
Да какое там коммерческая.... GoldenAndy для себя задумал сделать мелкую консольку с несколькими аркадными игрульками... Типа тетриса, зоникса, питончика и т.д. А я с ним заобщалась по поводу его тестера аккумуляторов... Слово за слово , в телеге разговорились. И родилась мысль (с моей подачи) - не зашивать игры в МК, а сделать что то типа виртуальной машинки , в которую будут компилиться программы на ЯВУ. Выбор пал на диалект бейсика. Сделали вдвоем. Задачка была интересная. Я там больше алгоритмами участвовала. В частности, работа с кучей и уборка мусора - один из моих алгоритмов там. Питона я под готовое изделие написала... Ссылки не знаю, можно тут на сторонние ресурсы постить или нет, но подпись у Энди ведет в его блог - там можно почитать.
Добрый день. Попалась вот такая запись в операции установки бит.
Код:
UCSR0C=(3<<UCSZ00);
Почему здесь тройка, и что она значит. Сколько ни смотрел разные руководства по битовым операциям, везде тут единица без исключений. Компилируется и работает нормально.
Смотрим документацию (стр. 193, 194): The UCSZn1:0 bits combined with the UCSZn2 bit in UCSRnB sets the number of data bits (Character SiZe) in a frame the Receiver and Transmitter use. (UCSZn2 = 0?), UCSZn1 = 1, UCSZn0 = 1 -> Character Size: 8-bit
Добрый день. Попалась вот такая запись в операции установки бит.
Код:
UCSR0C=(3<<UCSZ00);
Почему здесь тройка, и что она значит. Сколько ни смотрел разные руководства по битовым операциям, везде тут единица без исключений. Компилируется и работает нормально.
нормальные люди делают так:
Код:
UCSR0C=_BV(UСSZ00) | _BV(UCSZ01);
или так (что то же самое, но длиннее):
Код:
UCSR0C=(1<<UСSZ00) | (1<<UCSZ01);
, а ненормальные двигают сразу 2 бита в позицию UCSZ00, как у вас
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
USART_Init: ; Set baud rate out UBRRnH, r17 out UBRRnL, r16 ; Enable receiver and transmitter ldi r16, (1<<RXENn)|(1<<TXENn) out UCSRnB,r16 ; Set frame format: 8data, 2stop bit ldi r16, (1<<USBSn)|(3<<UCSZn0) out UCSRnC,r16 ret
стр. 185, C Code Example:
Код:
Enable receiver and transmitter */ UCSR0B = (1<<RXEN0)|(1<<TXEN0); /* Set frame format: 8data, 2stop bit */ UCSR0C = (1<<USBS0)|(3<<UCSZ00);
Ну, тут субъективно становится. Лично я за удобочитаемость и установку только того, что устанавливается, то есть, либо в твой вариант добавлю |, либо так же оставлю, если цель сбросить остальные поля. Но смещать тройку названием поля размером один бит... это в любом случае как-то странно выглядит.
тоже стараюсь все, но когда не лень, даю им нормальные названия, чтобы в итоге получалось UART = Speed9600 | Bit8 | WithParity. Но в последнее время лень, и тогда вариант ARV
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения