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

 
 
> FreeRTOS+AVRMega, эхо по юсарту
Volldemar
сообщение Apr 27 2012, 13:41
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 121
Регистрация: 27-04-09
Из: Украина
Пользователь №: 48 342



Сделал эхо по юсарту, т.е. принятый байт тут же отпраляется обратно. Прерывание на прием байта реализовал отложенное, через бинарный семафор, т.е. в обработчике RX выдается семафор, а отложенный обработчик ждёт этот семафор, и как только семафор захфатывает, идёт уже обработка. Так вот, проблема в том, что происходит "удвоение", т.е. передаю к примеру 12345, а принимается 1521324354.
прерывание юсарта:
Код
{
    static signed portBASE_TYPE xHigherPriorityTaskWoken;

    xHigherPriorityTaskWoken = pdFALSE;

    xSemaphoreGiveFromISR( xBinarySemaphoreUSART0RXvect, &xHigherPriorityTaskWoken );

    if( xHigherPriorityTaskWoken != pdFALSE )
        {
            taskYIELD();
        }
}

"отложенный" обработчик RX юсарта:
Код
static void prvUSART0RXvectTask( void *pvParameters )
{
    ( void ) pvParameters;

    uint8_t cChar;

    for(;; )
  {
    xSemaphoreTake( xBinarySemaphoreUSART0RXvect, portMAX_DELAY );

    if ( UCSR0A & ((1<<FE0)|(1<<DOR0)|(1<<UPE0)) )
    cChar = 0xFF;
    else
    cChar = UDR0;

    xQueueSendToBack( xRxedChars[0], &cChar, xNoBlock );
  }
}

и само "эхо":
Код
static void prvUSARTEchoTask0( void *pvParameters )
{
    uint8_t cChar;

    ( void ) pvParameters;

    for(;; )
        {
            if ( pdTRUE == xSerialGetChar ( mainUSART0, &cChar, portMAX_DELAY ) )
            xSerialPutChar( mainUSART0, cChar, xNoBlock );
        }

}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 21st August 2025 - 05:02
Рейтинг@Mail.ru


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