Помогите разобраться в строке кода.

Обсуждаем контроллеры компании Atmel.
Ответить
Neo_Matrix
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Ср июл 15, 2009 16:48:24

Помогите разобраться в строке кода.

Сообщение Neo_Matrix »

Пытаюсь портировать код с AVR на ARM. В коде под AVR(с ними никогда не имел дела), который выполняется в прерывании, есть непонятный мне кусок кода. Ниже сам код, в коментариях сам вопрос:

Код: Выделить всё

  if(UCSR0B & (1 << 2)) {               //Как я понимаю выполняется проверка включен ли 9-тый бит на USARTе
     data = ((UCSR0B >> 1) & 0x01);  //Что это? Это проверка на четность пришедшего бита и присвоение результата переменной data
  }


Похоже разобрался...
Все верно - это проверка на четность. Чет - 0, нечет - 1.
ArtemKolesnikov
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Вс фев 26, 2012 10:53:30

Re: Помогите разобраться в строке кода.

Сообщение ArtemKolesnikov »

Код: Выделить всё

 if(UCSR0B & (1 << 2)) {  
     data = ((UCSR0B >> 1) & 0x01);
  }

Если второй бит регистра UCSR0B равен 1 то data=1 если и первый бит регистра UCSR0B=1. Как-то так...
Проще говоря, если первый и второй бит регистра UCSR0B установлены 1, то data=1.

Код: Выделить всё

 ((UCSR0B >> 1) & 0x01);

возвращает 1 если первый бит регистра UCSR0B равен 1, иначе возвращает 0, если этот бит = 0. Звездец.
Наверное тот, кто писал этот код, копипастил его по кусочкам с различных фрилансерских сайтов, сам при этом не разбираясь (то есть, являясь по сути типичным фрилансером).
Neo_Matrix
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Ср июл 15, 2009 16:48:24

Re: Помогите разобраться в строке кода.

Сообщение Neo_Matrix »

ArtemKolesnikov
Да именно так код и работает. Это так организована проверка четности(9-тый бит USARTa),который в данном случае используется как признак адреса, или данных (Мультипроцессор моде).
Незнаю на счет фрилансерства, но этот код найден на гите.
П.С. Автор кода немец. :) Жоский немецкий код.
Ответить

Вернуться в «AVR»