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

 
 
> Кольцевой буфер не успевает себя сдвигать до прихода нового байта.., Помогите найти решение.
Alt.F4
сообщение Nov 9 2011, 19:43
Сообщение #1


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

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Добрый день.
Столкнулся с задачей, которую никак не могу решить.
Имеется кольцевой буфер UART на 150 байт. По приходу байта вызывается прерывание, где происходит его запись и сдвиг всего буфера. Но вот незадача, скорость UART 115200, а частота МК 9216кГц. В результате я имею запас всего 80 тактов, которых естественно не хватает на сдвиг этого буфера.
Что можно придумать? 05.gif
Спасибо.

P.S. на данной скорости UART работает стороннее устройство и ее изменять нельзя. Частота МК почти максимальная, т.к. питание 3В.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Alt.F4
сообщение Nov 10 2011, 14:46
Сообщение #2


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

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Данные в этих 150байтах лежат не в строгом порядке, в результате надо часто искать запятые, точки и другие символы. На флажках это дело решать муторно.
Я переделал по своему, вопрос исчерпан.
Спасибо.
Цитата
Хочется заметить, что на приём байта (а не бита!) у Вас аж 800 тактов.
Этого тоже не достаточно, ведь надо было прочитать, записать + счетчик перепроверить. В итоге: 150*7тактов=1050тактов.

Сообщение отредактировал Alt.F4 - Nov 10 2011, 15:00
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Nov 11 2011, 05:05
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



У вас идеология неверная. Уарт заполняет фифо и только.
Фоновая программа выгребает фифо и парсит фреймы. В таком варианте будет достаточным иметь размер фифо байт на 16-64..
А парсер фреймов (собственно протокол) может иметь свой буфер на максимальный размер пакета.
Как-то так обычно делается.
Благодаря чему выполняется парадигма минимизации времени обработки прерываний...
Более того некоторые протоколы регламентируют максимальный размер фифо канала связи. Так например modbus имеет пожелания на размер фифо в 32 байта...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
barabek
сообщение Nov 11 2011, 05:53
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Цитата(demiurg_spb @ Nov 11 2011, 15:05) *
У вас идеология неверная. Уарт заполняет фифо и только.
Фоновая программа выгребает фифо и парсит фреймы. В таком варианте будет достаточным иметь размер фифо байт на 16-64..
А парсер фреймов (собственно протокол) может иметь свой буфер на максимальный размер пакета.
Как-то так обычно делается.
Благодаря чему выполняется парадигма минимизации времени обработки прерываний...
Более того некоторые протоколы регламентируют максимальный размер фифо канала связи. Так например modbus имеет пожелания на размер фифо в 32 байта...


А если пример с NMEA? Там остановить передачу нельзя. В этом случае нужно иметь буфер на максимальную посылку. Ну а как обрабатывать - уже выше описали.




Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Nov 11 2011, 06:18
Сообщение #5


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(barabek @ Nov 11 2011, 08:53) *
А если пример с NMEA?
Тем более.
В 90% случаев цикл основной программы отрабатывается быстрее чем несколько мс. Только исходя из этого и выбирается размер фифо (чтобы не переполнился за эти пару мс).
Например на скорости 115200 один байт передаётся за ~90мкс, а цикл фоновой программы 2мс.
Следовательно минимальный размер фифо будет 2000мкс/90мкс = 22 байта. Округлим до ближайшего кратного 2 и получим 32.
ЧИТД. Вот такая простая арифметика.

А то, что вам написали (ловить старт-стоп) нужно делать в фоновой программе (в модуле протокола NMEA например медленно и печально искать пакеты и сверять crc) а не в ISR уарта.
Тем самым вы рассекаете на независимые логические модули свою программу.
Я вам дельный совет даю - прислушайтесь.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Alt.F4   Кольцевой буфер не успевает себя сдвигать до прихода нового байта..   Nov 9 2011, 19:43
- - ILYAUL   Проц -то какой? И зачем сдвигать весь буффер?   Nov 9 2011, 19:49
- - GinRider   Зачем сдвигать буфер? Не проще ли писать по следую...   Nov 9 2011, 19:49
- - DpInRock   А зачем его сдвигать? Есть такое понятие - голова ...   Nov 9 2011, 19:51
- - rx3apf   Цитата(Alt.F4 @ Nov 9 2011, 23:43) Имеетс...   Nov 9 2011, 19:52
- - ILYAUL   Много не понятного , сразу все 150 принимаются и п...   Nov 9 2011, 20:00
- - silverio   Здесь доходчиво написано: http://chipenable.ru/in...   Nov 9 2011, 21:01
- - Alt.F4   Дело в том, что мне надо вылавливать из этих 150ба...   Nov 10 2011, 07:07
|- - Сергей Борщ   QUOTE (Alt.F4 @ Nov 10 2011, 10:07) Таким...   Nov 10 2011, 07:30
|- - xemul   Цитата(Alt.F4 @ Nov 10 2011, 11:07) Дело ...   Nov 10 2011, 08:33
|- - ILYAUL   Цитата(Alt.F4 @ Nov 10 2011, 11:07) Дело ...   Nov 10 2011, 09:46
- - esaulenka   Цитата(Alt.F4 @ Nov 9 2011, 23:43) Но вот...   Nov 10 2011, 09:04
|- - demiurg_spb   Размер кольцевого буфера лучше иметь кратным степе...   Nov 10 2011, 09:40
|- - Demeny   Цитата(demiurg_spb @ Nov 10 2011, 13:40) ...   Nov 11 2011, 10:03
- - Flexz   При желании разбирать входные данные можно вообще ...   Nov 11 2011, 06:25
|- - demiurg_spb   Цитата(Flexz @ Nov 11 2011, 09:25) При же...   Nov 11 2011, 06:35
- - Flexz   Все относительно и ситуационно. Дилетантский подхо...   Nov 11 2011, 06:52
|- - ILYAUL   Цитата(Flexz @ Nov 11 2011, 10:52) Все от...   Nov 11 2011, 08:11
|- - demiurg_spb   Цитата(Flexz @ Nov 11 2011, 09:52) Часто ...   Nov 11 2011, 08:29
- - DpInRock   Для простых программ (относительно простых), с кра...   Nov 11 2011, 07:47
|- - _Pasha   Цитата(DpInRock @ Nov 11 2011, 10:47) Но ...   Nov 11 2011, 09:24
- - Genadi Zawidowski   Автору уже советовали конечный автомат - так как о...   Nov 11 2011, 09:19
- - Flexz   Цитата(demiurg_spb @ Nov 11 2011, 11:29) ...   Nov 11 2011, 09:47
|- - demiurg_spb   Цитата(Flexz @ Nov 11 2011, 12:47) что, к...   Nov 11 2011, 10:12
|- - ILYAUL   Цитата(Flexz @ Nov 11 2011, 13:47) что, к...   Nov 11 2011, 10:18
- - Nixon   Проще закруглять. Одной командой &.   Nov 11 2011, 10:07
- - Alt.F4   Обрабатываю NMEA. Сделал следующим образом: В памя...   Nov 11 2011, 10:15
|- - demiurg_spb   Цитата(Alt.F4 @ Nov 11 2011, 13:15) В ито...   Nov 11 2011, 10:30
|- - xemul   Цитата(Alt.F4 @ Nov 11 2011, 14:15) Обраб...   Nov 11 2011, 10:59
|- - Сергей Борщ   QUOTE (Alt.F4 @ Nov 11 2011, 13:15) В пам...   Nov 11 2011, 11:41
|- - _Pasha   Цитата(Alt.F4 @ Nov 11 2011, 13:15) Обраб...   Nov 11 2011, 13:38
|- - kolobok0   Цитата(Alt.F4 @ Nov 11 2011, 14:15) ...В ...   Nov 11 2011, 19:15
- - Flexz   Как хотите) 1. У ТС проблемы с временем выполнения...   Nov 11 2011, 10:25
- - Flexz   Цитата(ILYAUL @ Nov 11 2011, 13:18) 1. Та...   Nov 11 2011, 10:30
|- - demiurg_spb   Пис, братья!:)   Nov 11 2011, 10:36
|- - ILYAUL   Цитата(Flexz @ Nov 11 2011, 14:30) зачем ...   Nov 11 2011, 10:43
|- - demiurg_spb   Цитата(ILYAUL @ Nov 11 2011, 13:43) Я об ...   Nov 11 2011, 11:52
|- - ILYAUL   Цитата(demiurg_spb @ Nov 11 2011, 15:51) ...   Nov 11 2011, 11:56
- - Alt.F4   ЦитатаПозволю себе усомниться в последнем утвержде...   Nov 11 2011, 10:40
|- - demiurg_spb   Цитата(Alt.F4 @ Nov 11 2011, 13:40) Специ...   Nov 11 2011, 11:45
|- - ILYAUL   Цитата(demiurg_spb @ Nov 11 2011, 15:45) ...   Nov 11 2011, 11:49
- - Alt.F4   xemul, спасибо, я уже решил задачу. Из всех NMEA о...   Nov 11 2011, 11:08
- - Flexz   ILYAUL Пятница, вечер, кому-то пора отдыхать. И не...   Nov 11 2011, 12:46
|- - ILYAUL   Цитата(Flexz @ Nov 11 2011, 16:46) Ясно н...   Nov 11 2011, 14:50
|- - AHTOXA   Цитата(ILYAUL @ Nov 11 2011, 20:50) Цитат...   Nov 11 2011, 18:19
|- - ILYAUL   Цитата(AHTOXA @ Nov 11 2011, 22:19) Расши...   Nov 11 2011, 18:45
|- - AHTOXA   Цитата(ILYAUL @ Nov 12 2011, 00:45) Попро...   Nov 11 2011, 20:50
|- - ILYAUL   Цитата(AHTOXA @ Nov 12 2011, 00:50) Мда. ...   Nov 11 2011, 21:44
|- - aaarrr   Цитата(ILYAUL @ Nov 12 2011, 01:44) Что и...   Nov 11 2011, 22:01
|- - Allregia   Цитата(ILYAUL @ Nov 11 2011, 23:44) Для т...   Nov 12 2011, 09:46
- - Flexz   Каверкать чужие слова, и выдавать свои мысли за чу...   Nov 11 2011, 16:46
|- - ILYAUL   Цитата(Flexz @ Nov 11 2011, 20:46) Каверк...   Nov 11 2011, 17:01
- - ILYAUL   Allregia , aaarrr Спасибо, за Выше прочтение , но...   Nov 12 2011, 10:24
|- - AHTOXA   Цитата(ILYAUL @ Nov 12 2011, 16:24) Спаси...   Nov 12 2011, 12:59
- - _Ivana   О как интересно! Примерно в то же время, что р...   Jan 10 2012, 17:01
|- - _Артём_   Цитата(_Ivana @ Jan 10 2012, 19:01) добил...   Jan 12 2012, 12:24
- - _Ivana   ЦитатаЧто за прерывания без флагов, просветите. Бы...   Jan 12 2012, 20:00
- - _Артём_   Цитата(_Ivana @ Jan 12 2012, 22:00) Был б...   Jan 12 2012, 22:10


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

 


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


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