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

 
 
> UART STM32F100Rxx и определение окончание приема "пакета" данных
alexdos
сообщение Mar 12 2013, 08:14
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 339
Регистрация: 10-07-08
Из: Херсон
Пользователь №: 38 856



По какому признаку можно определить что "пакет" данных в буфер по прерыванию принят. Данные идут от GPS приёмника, их количество не фиксировано. Тоесть может быть к примеру 146 байт, а может быть 152 байта.
Пробую через (USART_GetITStatus(USART2,USART_IT_IDLE) != RESET), но неверно определяет окончание приёма, данные не приняты все, а мне уже симафорит что принято.
Или по старинке, использовать таймер для определения окончания приёма?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
drum1987
сообщение Mar 12 2013, 09:48
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 255
Регистрация: 3-02-09
Из: Омск
Пользователь №: 44 323



вы когда байт складываете в буфер попутно проверяйте не символ ли это переноса строки...если нет то ждете дальше, а если да, то значит вы приняли посылку полностью...можно выставить флаг или сразу обрабатывать принятые данные.
Go to the top of the page
 
+Quote Post
alexdos
сообщение Mar 12 2013, 10:06
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 339
Регистрация: 10-07-08
Из: Херсон
Пользователь №: 38 856



Цитата(drum1987 @ Mar 12 2013, 12:48) *
вы когда байт складываете в буфер попутно проверяйте не символ ли это переноса строки...если нет то ждете дальше, а если да, то значит вы приняли посылку полностью...можно выставить флаг или сразу обрабатывать принятые данные.

Я уже писал, что в общем пакете данных находится несколько NMEA, каждый с которых оканчивается символом переноса строки.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 12 2013, 10:44
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (alexdos @ Mar 12 2013, 12:06) *
Я уже писал, что в общем пакете данных находится несколько NMEA, каждый с которых оканчивается символом переноса строки.
Поставьте себя на место процессора. По какому признаку вы опредлелили бы, что пакет закончился? По паузе? Так и спрашивайте - "есть ли механизм обнаружения пауз в посылке?". Специального механизма отслеживания пауз в UART нет. Да, можно городить на дополнительном таймере.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
alexdos
сообщение Mar 12 2013, 13:49
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 339
Регистрация: 10-07-08
Из: Херсон
Пользователь №: 38 856



Сергей Борщ , спасибо за понятный ответ.
Теперь осталось разобратся что ж за прерывание USART_IT_IDLE. Когда оно происходит.


Цитата(KnightIgor @ Mar 12 2013, 17:12) *
Вам код дать?



Спасибо за предложения кода. Но он мне не нужен. На PIC18F46J50, у меня все реализовано, и работает в сотнях устройств без нареканий. Да, я принудительно оключил ("заглушил") передачу ненужных мне данных с GPS. Да, я знаю про кольцевые буферы, про парсеры и тому подобное. Я следую логике, что приняв весь пакет от GPS за времмя приблизительно 17 милиСек (не более 200 байт) у меня будет времени разобратся с этим пакетом 1 - 0.017 = 0.983 Сек. В случае же к примеру использования методики отлавливания конца строки, и если буфер не достаточной величины (или указатель обнуляется) , мне желательно вложится в время кратное приёму одного байта, для обработки принятого NMEI, а это составляет приблизительно 86 микроСек. Вот поэтому я и хочу принять весь пакет, чтоб потом неспешно, его разобрать.

Сообщение отредактировал alexdos - Mar 12 2013, 13:51
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Mar 12 2013, 14:07
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(alexdos @ Mar 12 2013, 14:49) *
знаю про кольцевые буферы, про парсеры и тому подобное.

Ну так Вы все знаете. А неполно поставленный вопрос вначале наводил на иную оценку. Извините.

Цитата
Я следую логике, что приняв весь пакет от GPS за времмя приблизительно 17 милиСек (не более 200 байт) у меня будет времени разобратся с этим пакетом 1 - 0.017 = 0.983 Сек. В случае же к примеру использования методики отлавливания конца строки, и если буфер не достаточной величины (или указатель обнуляется) , мне желательно вложится в время кратное приёму одного байта, для обработки принятого NMEI, а это составляет приблизительно 86 микроСек. Вот поэтому я и хочу принять весь пакет, чтоб потом неспешно, его разобрать.

Думаю, при такой постановке вопроса и условии, что токенов мало (остальные отфильтрованы), а период составляет, скажем, 1 секунду, можно пойти по пути определения окончания пачки токенов путем таймаута. USART это вряд ли обеспечит: IDLE срабатывает, если прошло пару битов со времени последнего STOP. Никто, однако, не может гарантировать, что GPS сыплет байтами плотно друг за дружкой. Поэтому об IDLE можете тоже забыть. Остается только внешний таймер, перезапускаемый приемом байта USART и срабатывающий, скажем, после неприема трех-четырех байт - это надо заценить опытно.

Тем не менее, я не понимаю проблемы вложиться с обработкой токена в какие-то жесткие временные рамки: их просто нет, т.к. обработка токена (читай - строки) может происходить, пока принимается другой токен, а это - куча байт, а значит - и времени. То же касается и требуемой памяти: токены не такие уж и длинные (байт 50-60, думаю). Неужели напряг с этим? Вы же в форуме ARM - тут речь о множестве килобайт в микроконтроллерах или мегабайт, кто там с внешней памятью играется....
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- alexdos   UART STM32F100Rxx и определение окончание приема "пакета" данных   Mar 12 2013, 08:14
- - uriy   ЦитатаТоесть может быть к примеру 146 байт, а може...   Mar 12 2013, 08:39
|- - alexdos   "NMEA пакеты заканчиваются символом переноса ...   Mar 12 2013, 09:36
|- - KnightIgor   Цитата(alexdos @ Mar 12 2013, 10:36) Knig...   Mar 12 2013, 13:12
- - KnightIgor   Цитата(alexdos @ Mar 12 2013, 09:14) По к...   Mar 12 2013, 08:50
|- - mempfis_   Цитата(alexdos @ Mar 12 2013, 13:06) Я уж...   Mar 12 2013, 10:26
|- - Сергей Борщ   QUOTE (alexdos @ Mar 12 2013, 15:49) Тепе...   Mar 12 2013, 14:05
- - Golikov A.   Думаю все тянется со старого пика, который работае...   Mar 12 2013, 16:57
|- - alexdos   Цитата(Golikov A. @ Mar 12 2013, 20:57) П...   Mar 12 2013, 17:38
- - richie   А это зависит от самих данных, соглашения об их ор...   Mar 12 2013, 18:10
|- - alexdos   Цитата(richie @ Mar 12 2013, 22:10) P.S. ...   Mar 12 2013, 18:31
|- - richie   Цитата(alexdos @ Mar 12 2013, 22:31) СRC ...   Mar 14 2013, 05:35
|- - demiurg_spb   разговор ни о чём...   Mar 14 2013, 05:48
|- - Golikov A.   Цитата(richie @ Mar 14 2013, 09:35) P.S. ...   Mar 14 2013, 06:05
|- - alexdos   Наверное я не так изначально поставил вопрос. Но т...   Mar 14 2013, 08:38
- - Golikov A.   можно делать выводы что вы их не нашли. Я больше ...   Mar 12 2013, 19:55
|- - DmitryM   Цитата(Golikov A. @ Mar 12 2013, 23:55) м...   Mar 13 2013, 04:35
- - Golikov A.   но только потому что на каждое сообщение должен бы...   Mar 13 2013, 14:57
|- - DmitryM   Цитата(Golikov A. @ Mar 13 2013, 18:57) н...   Mar 13 2013, 15:48
- - Golikov A.   в этом и фишка, что если устройство ответит то мож...   Mar 13 2013, 16:56
|- - alexdos   Цитата(Golikov A. @ Mar 13 2013, 20:56) П...   Mar 13 2013, 20:29
|- - _Артём_   Цитата(alexdos @ Mar 13 2013, 22:29) Да г...   Mar 13 2013, 21:11
- - vlad_new   ЦитатаСпециального механизма отслеживания пауз в U...   Mar 13 2013, 17:02
- - Golikov A.   Не тут что-то не так. Любой протокол на базе УАРТ...   Mar 14 2013, 03:27
- - Golikov A.   Ну хотелось бы разделить лавры с другими участника...   Mar 14 2013, 15:28
|- - alexdos   Цитата(Golikov A. @ Mar 14 2013, 19:28) Н...   Mar 14 2013, 18:48
- - Golikov A.   весьма познавательно, спасибо. Надо будет где нибу...   Mar 14 2013, 18:57


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

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 22:40
Рейтинг@Mail.ru


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