реклама на сайте
подробности

 
 
> WinAvr, вопрос по препроцессору
xelos
сообщение Jun 23 2006, 16:26
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 33
Регистрация: 18-04-05
Из: Paris
Пользователь №: 4 271



вобщем у меня стажер тут, попросил написать ему библиотеку для работы с уартом на ATMega128.

4 функции ему всего надо - инициализация, получение байта, отправка байта и проверка получен ли байт

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

по известным причинам - решил сделать всю конфигурацию препроцессором.

получилось что-то:
Код
//USART initialisation function
//Initialisation, asynchronous transmission
void USART_Init()
{

   // set baud rate
   UBRRH = (F_CPU / BAUD_RATE / 16 - 1) >> 8;
   UBRRL = (F_CPU / BAUD_RATE / 16 - 1);

   //set UCSZ2 if 9-bit communication
   #ifdef FRAME_LENGTH9
   UCRSRA |= (1<< UCSZ2)
   #endif

   //asynchronous 8 bit
   UCSRC = (1 << UCSZ0) | (1 <<UCSZ1);    

   //Parity bit
   #ifdef ODD_PARITY
   UCSRC |= (1<<UPM1) | (1<<UPM0);
   #endif

   #ifdef EVEN_PARITY
   UCSRC |= (1<<UPM0);
   #endif

         //if 2 stop bits
   #ifdef STOP2
   UCSRC |= (1 << USBS);
   #endif

   // Enable receiver and transmitter;
   UCSRB = (1 << RXEN) | (1 << TXEN);


}


что напрягает:
//asynchronous 8 bit
UCSRC = (1 << UCSZ0) | (1 <<UCSZ1);

#ifdef ODD_PARITY
UCSRC |= (1<<UPM1) | (1<<UPM0);
#endif
поясняю: 2 команды на конфигурацию 1 регистра.
а хотелось бы всю конфигурацию этого регистра записать одной командой. а как, не рассматирвая все конфигурации - не вижу. кто поможет?
компилятор - gcc

P.S.
еще такой момент, как в окне компиляции заставить выводить сообщения пользовательские - типа текущую конфигурацию.

типа #error, тока чтоб не блокировал компиляцию.
#warning в моем gcc почему-то не распознается

Сообщение отредактировал xelos - Jun 23 2006, 16:28
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 18:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01364 секунд с 7
ELECTRONIX ©2004-2016