Ph.D. of biomedical engineering 0<<REG

alexbmd
Offline
Зарегистрирован: 15.01.2016

Я обычно прохожу мимо таких опосумов (но сегодня это уже 5ый в гугле) + там почти каждая строчка шедевр.  Но зайдя в about я понял что может я погорячился и не прав. Может Доктор Наук таки всё правильно делает ?

https://scienceprog.com/interrupt-driven-avr-usart-communication/

b707
Offline
Зарегистрирован: 26.05.2017

в регистрах USART на память не разберусь, но каких-то принципиальных ошибок в коде не вижу. Если укажете, куда смотреть - буду благодарен.

Хотя, зная вас, думаю что это вы просто что-то не поняли

sadman41
Offline
Зарегистрирован: 19.10.2016

Это просто удобная запись, позволяющая быстро делать ВКЛ/выкл регистрам не стирая часть строки кода или не дописывая её.

b707
Offline
Зарегистрирован: 26.05.2017

sadman41 пишет:
Это просто удобная запись, позволяющая быстро делать ВКЛ/выкл регистрам не стирая часть строки кода или не дописывая её.

вы о чем хоть говорите? Об этой строчке?

UCSRC=(1<<URSEL)|(0<<UMSEL)|(0<<UPM1)|(0<<UPM0)|
        (0<<USBS)|(0<<UCSZ2)|(1<<UCSZ1)|(1<<UCSZ0); 

и что ТС в ней нашел такого удивительного?

alexbmd
Offline
Зарегистрирован: 15.01.2016

sadman41

всмысле указываем все биты из регистра (даже те которые нам сейчас не нужны) и потом просто меняем в каждм 0 на 1 и наоборот по потребностям?

sadman41
Offline
Зарегистрирован: 19.10.2016

Bingo.

alexbmd
Offline
Зарегистрирован: 15.01.2016

ну оно может и легко комуто.. но часто во всем регистре 1-2 бита менять надо, и вот тащить всю эту колбасу... ну не знаю.

Хорошо а в этой строчке

UDR=Temp;

разве не мусор будет ?

b707
Offline
Зарегистрирован: 26.05.2017

alexbmd пишет:

ну оно может и легко комуто.. но часто во всем регистре 1-2 бита менять надо, и вот тащить всю эту колбасу... ну не знаю.

"вся эта колбаса" будет заменена при компиляции на одну константу, независимо от числа измененных бит. Зато сама запись фактически дает "самодокументированный код" - никаких комментариев не надо.

alexbmd
Offline
Зарегистрирован: 15.01.2016

 для листинга , особено если помнишь знаешь эти регистры, оно легче для восприятея, согласен.

а тут он передает вроде как следующую букву из ASCII

    Temp++;//increment
    // no need to wait for empty send buffer
    UDR=Temp;

но прилететь же может не только буква а и спец символ инкреминтирую который можем словить глюк. плюс отправка без проверки готовности может ведь перезаписать еще не отправленный байт?

b707
Offline
Зарегистрирован: 26.05.2017

alexbmd пишет:

 но прилететь же может не только буква а и спец символ инкреминтирую который можем словить глюк.

алекс, ну какие буквы нафик, что за чушь вы пишете? Принимается байт, инкрементируется байт, отправляется байт. А буквы там, цифры, знаки препинания или руны друидов - это все уже человек додумывает, компьютер про это не в курсе.

Green
Offline
Зарегистрирован: 01.10.2015

У Алекса что ни тема, то шедевр.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Гайвер, штоли?

Green
Offline
Зарегистрирован: 01.10.2015

mbd

alexbmd
Offline
Зарегистрирован: 15.01.2016

нет, я прекрасно понимаю что это просто биты в любом случае.. но код же пишется для человека.

b707
Offline
Зарегистрирован: 26.05.2017

alexbmd пишет:

нет, я прекрасно понимаю что это просто биты в любом случае.

понимали бы - вопроса бы не было

Цитата:
но код же пишется для человека.

еще один перл

Green
Offline
Зарегистрирован: 01.10.2015

Как раз для человека все биты перед глазами. Скобки только мешаются.

alexbmd
Offline
Зарегистрирован: 15.01.2016

Монитор мешается. Человек мыслено биты получает а экран их экранирует!

Green
Offline
Зарегистрирован: 01.10.2015

Вино - рубль литр, карбид в углу по вкусу. Молдавия она такая.

alexbmd
Offline
Зарегистрирован: 15.01.2016

Там из крана по прямотоку течёт