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

 
 
> Как грамотные люди делают прием пакетов по 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
Ответов
TamTam
сообщение Jun 6 2006, 08:46
Сообщение #2


Местный
***

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



Цитата(vesago @ Jun 6 2006, 12:08) *
Мне понравилось как у Атмела сделано. Я такую конструкцию не только для уарта применяю, но и вообще где надо стыковать асинхронные процессы. Также в примерах исходников prottos привел классный драйверок - аналог. На прием естественно надо таймаут ставить - после приема каждого байта заряжать таймер. Если нет данных в течение опеределенного времени - сбрасываем стэк. Кроме кольцевого буфера нужен буфер для сборки принимаемых пакетов и буфер для сборки отправляемых пакетов. А на будущее - haker_fox далл ссылку на прекрасный на мой субъективный взгляд протокол. Сам его повсеместно использую. Четко и стабильно работает. Програмная реализация тоже есть в исходниках.


Да WAKE штука хорошая. Я его тоже однажды применял. но железо не моё было я токо под дельфю переписывал. Хотел библу с исходником выложить да так и потерял сурц а библа гдето лежит.
Go to the top of the page
 
+Quote Post
Sergiy
сообщение Jun 6 2006, 09:15
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 26
Регистрация: 29-05-06
Из: Netherlands (Delft)/Ukraine (Odessa)
Пользователь №: 17 547



Да, обратите внимание на фразу, что в обработчиках прерывания должны быть краткие функции, и не в коем случае писать незя в ЕЕПРОМ, потому что процесс достаточно длителен (мс на байт), выставьте битовую переменную, что нужный пакет в буфере обмена и готовьте следующее окно (я использую двухоконные буфера), когда один заполняется, второй готов и константен для целевой функции - все довольны, а оперирую двумя битовыми флагами, один показывает, что новый буфер подготовлен и ожидает, а второй что какое окно надо пользовать в данный момент целевой функцией, первое может менять в активное состояние прерывание приемника, в пассивное возвращает целевая функция, а окна переключаются в инверсии, да два буфера хватит если есть простой в конце заполнения второго буфера и ждать пока не будет сброшен обработки первого буфера в целевой функции.

Когда позволяет выбрать протокол - выбор вообще делаю в пользу битовой синхронизации начала пакета, работает не просто железно, а супержелезно. По таймауту тоже применяю, когда надо минимальная длина пакета с простой упаковкой. Применять шапочную синхронизацию по голове и-или хвосту без таймаутной проверки не стал бы - рискуете потерять часть пакетов и рассинхронизироваться, когда в секторе данных будут шапки - поймете их за служебные - а это только данные на самом деле. Но когда нить конечно синхронизация будет восстановлено, но пакеты патеряны для вас. Можно синхронизировать тройками, когда в секторе данных есть синхросимволы, то повторять их подряд три раза, это знак что это данные. Но это немного увеличит трафик и распаковку пакетов. Да, при таймаутах учитывайте особенности программирования под винду. Обрамляйте процесс передачи пакета в Делфи или Билдере где вы там пишете в РиалТайм процесс, это делается парой строчкой на Делфи но значительно понижает вероятность ложного таймаута внутри пакета. Хотя шанс маленький все равно остается, иногда больший (на раком установленных операционках, высокоприоритетных задачах, выполняемых одновременно с вашим приложением - запись, форматирование дисков smile.gif.
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
- - beer_warrior   Идея правильная, вот пример кода который кочует из...   Jun 5 2006, 05:24
- - 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   Цитата(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 Текстовая версия Сейчас: 19th July 2025 - 04:20
Рейтинг@Mail.ru


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