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

 
 
> Как грамотные люди делают прием пакетов по USART
TamTam
сообщение Jun 5 2006, 01:11
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 293
Регистрация: 14-03-06
Пользователь №: 15 254



Ну написал с горем пополам обработку прирывания по окончанию приема байта, процедурку копирования из буфера в eeprom, но вот вопрос ???

Данные приходят всегда по разному иногда в нужной мне строке символ 0х0d и 0х0а встречаються несколько раз значит обработка пришедших данныш по окончанию строки мне не подходит, думаю так
после окончания приема запускать таймер и если за отведенное время не поступит следующий байт тогда начинать обработку данных а если данные еще идут то складываем их в еепром.

Правильно ли я мыслю или может есть способ по приличней, ведь таймер нужная и без этого весчь.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
beer_warrior
сообщение Jun 5 2006, 05:24
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Идея правильная, вот пример кода который кочует из проекта в проект:

Код
struct {
        volatile    BYTE    mode;
        volatile    WORD  timeout;
        volatile    BYTE    errc;
        
        volatile    WORD    tx_cnt;
        volatile    WORD    tx_len;
        BYTE*               tx_buf;
        
        volatile    WORD    rx_cnt;
        volatile    WORD    rx_len;
        BYTE*                   rx_buf;
        } UCB; //UART control block

SIGNAL(SIG_UART_RECV)
{
//wdt_reset();
SET_RX_BUSY;

UCB.timeout = 0;
UCB.rx_buf[UCB.rx_cnt] = UDR;

if(hRxProc) hRxProc();

UCB.rx_cnt++;

if(UCB.rx_cnt >= UCB.rx_len)
    {
    CLR_RX_BUSY;
    if(hRxEnd) hRxEnd();    
    UCB.rx_cnt = 0;
    }
}


Здесь:
SET_RX_BUSY - установка флажка занятости UART (пакет в процессе приема)
hRxProc() вызов функции для анализа пришедшего байта проинициализиоравна как NULL
hRxEnd() вызов функции обработки заполненного буфера.
BYTE* tx_buf,rx_buf указатели на объявленные глобально буфера.

Теперь самое интересное- UCB.timeout. Один из таймеров умеющий работать в режиме CTC,
настроен на генерацию миллисекунд, в его прерывании ин(де)крементируются счетчики задержек,
счетчики секунд и UCB.timeout который проверяеться либо в основном контексте либо в hRxProc(),
смотря по протоколу.

И последнее не надо складывать данные сразу в EEPPROM - он не вечен.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- TamTam   Как грамотные люди делают прием пакетов по USART   Jun 5 2006, 01:11
- - TamTam   Цитата(kertis @ Jun 5 2006, 05:48) не оче...   Jun 5 2006, 01:59
- - rat   Принимаемый поток организуете Вы же? Если так, то ...   Jun 5 2006, 02:36
|- - TamTam   Цитата(rat @ Jun 5 2006, 06:36) Принимаем...   Jun 5 2006, 02:49
- - haker_fox   Может быть эта ссылка Вам поможет?   Jun 5 2006, 03:04
- - TamTam   Цитата(haker_fox @ Jun 5 2006, 07:04) Мож...   Jun 5 2006, 03:44
- - WHALE   Судя по 0A,0D-это модем.Действительн,в eeprom заче...   Jun 5 2006, 05:44
- - vet   Цитата(TamTam @ Jun 5 2006, 05:11) Ну нап...   Jun 5 2006, 05:59
- - Nanobyte   Лучше применять не RAM со всеми его недостатками, ...   Jun 5 2006, 07:39
- - WHALE   а почем нынче fram ?   Jun 5 2006, 07:56
|- - otrog   Цитата(WHALE @ Jun 5 2006, 11:56) а почем...   Jun 5 2006, 09:22
- - beer_warrior   Насколько я понял человек пишет во внутреннюю EEPR...   Jun 5 2006, 08:44
- - TamTam   Цитата(WHALE @ Jun 5 2006, 09:44) Судя по...   Jun 6 2006, 02:06
- - vesago   Мне понравилось как у Атмела сделано. Я такую конс...   Jun 6 2006, 08:08
- - TamTam   Цитата(vesago @ Jun 6 2006, 12:08) Мне по...   Jun 6 2006, 08:46
|- - Sergiy   Да, обратите внимание на фразу, что в обработчиках...   Jun 6 2006, 09:15
- - TamTam   Цитата(Sergiy @ Jun 6 2006, 13:15) Да, об...   Jun 6 2006, 09:38
- - Sergiy   Цитата(TamTam @ Jun 6 2006, 11:38) Цитата...   Jun 7 2006, 08:03
- - Sergiy   Цитата(TamTam @ Jun 6 2006, 11:38) Цитата...   Jun 7 2006, 08:15


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 11:50
Рейтинг@Mail.ru


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