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

 
 
> AVR+FREERTOS+RS485, потеря байтов
Volldemar
сообщение Apr 4 2012, 13:26
Сообщение #1


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

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



Тупик, прошу помощи, это мой первый опыт с фриртосой.
Значит так, всё крутится в мега1284. Делаю пересылку между юсартами, с первого принимаю, на второй передаю, со второго принима, н апервый передаю. RS485 на втором. Пока было без драйверов 485 (ADM485) две FT232 на два порта юсба в комп, всё бегало без проблем, а вот с драйвером - беда, беда, печалька... Симптом: по юсарт1 принимаю байты, на юсарт2 выдаю, ну и запущено две терминальные проги на компе, теряются байты, передаю 20, принимаю 17...20.
вот мои обработчики прерываний:
Код
ISR( USART1_UDRE_vect )
{
    uint8_t cChar;
    signed portBASE_TYPE cTaskWoken;

    if( xQueueReceiveFromISR( xCharsForTx[1], &cChar, &cTaskWoken ) == pdTRUE )
    {
        RS485_tx;
        UDR1 = cChar;
    }
    else
    {
        vInterruptOff(1); // запрещение прерывания UDRE1
    }
}

Код
ISR( USART1_TX_vect )
{
    RS485_rx;
}

где косяк? подскажите плиз...

Сообщение отредактировал Volldemar - Apr 5 2012, 13:22
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Lotor
сообщение Apr 28 2012, 11:47
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(Volldemar @ Apr 4 2012, 17:26) *
Код
ISR( USART1_UDRE_vect )
{
    uint8_t cChar;
    signed portBASE_TYPE cTaskWoken;

    if( xQueueReceiveFromISR( xCharsForTx[1], &cChar, &cTaskWoken ) == pdTRUE )
    {
        RS485_tx;
        UDR1 = cChar;
    }
    else
    {
        vInterruptOff(1); // запрещение прерывания UDRE1
    }
}

Код
ISR( USART1_TX_vect )
{
    RS485_rx;
}

где косяк? подскажите плиз...

Я могу ошибаться, но смотрите, приоритет USART1_UDRE_vect выше чем USART1_TX_vect. И т.к. последнее разрешено всегда, то оно может вклиниться в неподходящий момент. Вот и потеря данных. Вообщем, самое простое - это переписать для начала код, чтобы использовалось одно прерывание USART1_TX_vect. Если потери исчезнут - то будете знать, где копать.


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Volldemar   AVR+FREERTOS+RS485   Apr 4 2012, 13:26
- - Volldemar   Кодinline portBASE_TYPE xSerialPutChar485( uin...   Apr 5 2012, 13:35
- - Volldemar   Может я что то не так делаю? поздскажите, кто имел...   Apr 9 2012, 08:33
- - juvf   Цитата(Volldemar @ Apr 4 2012, 19:26) Сим...   Apr 13 2012, 03:50
- - Volldemar   В компе, на двух юсбах висят FT232, на одной из ни...   Apr 13 2012, 06:09
|- - juvf   Цитата(Volldemar @ Apr 13 2012, 12:09) В ...   Apr 13 2012, 06:59
|- - Volldemar   Цитата(juvf @ Apr 13 2012, 09:59) эээ.......   Apr 13 2012, 07:41
- - juvf   ЦитатаFT232. Оказывается, у нее есть ножка которая...   Apr 13 2012, 09:02
|- - Volldemar   Цитата(juvf @ Apr 13 2012, 12:02) Не знал...   Apr 13 2012, 11:39
- - unkier   а осцилом или логическим анализатором глянуть где ...   Apr 28 2012, 07:40
|- - Volldemar   Цитата(unkier @ Apr 28 2012, 10:40) а осц...   Apr 28 2012, 07:47
- - unkier   мигнуть светодиодом из обработчика прерывания ? и ...   Apr 28 2012, 08:31
|- - Volldemar   Цитата(Lotor @ Apr 28 2012, 14:47) Я могу...   May 4 2012, 11:40
|- - Lotor   Цитата(Volldemar @ May 4 2012, 15:40) Не ...   May 5 2012, 04:34
- - Volldemar   Проблему решил. Не знаю на сколько правильно, но р...   May 8 2012, 14:48
- - bumborashik   Цитата(Volldemar @ May 8 2012, 17:48) Про...   Dec 27 2012, 10:08


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

 


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


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