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

 
 
> Алгоритм получения строки с СИМХХХ
zebrox
сообщение Nov 22 2010, 13:02
Сообщение #1


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

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



Всем привет.
Может вопрос глупый конечено, и никакой проблемы нет.

Есть вопрос такого плана.
Как правильно получать строку (ответа) от сима.
\r\nMessage\r\n

Я вижу два возможных варианта.

Вариант 1.
1.При первом прерывании от юарта, уходим в него, выключаем прерывания, выставляем флаг пришедьших данных, выходим из прерывания.
2.В основном цикле, если видим флаг читаем строку, и обрабатываем ее (тут получается небольшая проблема, т.к. нужно делать некий автомат состояний и нужно постоянно помнить какое было последнее сообщение). После обработки сообщения включаем прерывания от юарта.

Вариан 2, извращенный smile.gif
1.При первом прерывании от юарта, получаем символ, записываем в буффер, запускаем таймер на 0.4сек скажем.
2.при следующем прерывании от юарта (до истечения таймера), записываем следующий символ в буффер, перезапускаем таймер.
3.так делаем до тех пор, пока таймер 0,4 сек не истечет или буфер не заполнится.
4.Когда таймер истек, имеем в буффере все сообщение от сима, обрабатываем его.

А как Вы получаете данные с сима?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zebrox
сообщение Nov 22 2010, 15:44
Сообщение #2


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

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



пока я это смутно представляю.

правилен ли следующий алгоритм?
имеем N буфферов, b1,b2,b3...bn, скажем по 100 байт каждый, активный буффер b1.

- по прерывании, загружаем символы в ативный буффер, получили \р\н, выставляем флаг что даннанные в буффере b1 готовы.
- в основном цикле, если видим флаг, делаем активным буффер b+1 , обрабатываем данные из буффера b1, если в это время идут симфолы по юарту, они будут загружаться в b+1.
- по окнчанию обработки данных из b1, делаем его как пустой.

Что-то мне это не очень нравится, много памяти нужно.
Повторю вопрос, можно ли заставить сим деалать паузу между выдаваемыми строками?
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Nov 22 2010, 16:00
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(zebrox @ Nov 22 2010, 18:44) *
пока я это смутно представляю.

правилен ли следующий алгоритм?
имеем N буфферов, b1,b2,b3...bn, скажем по 100 байт каждый, активный буффер b1.
....
Что-то мне это не очень нравится, много памяти нужно.

И правильно не нравится, совершенно извращенный алгоритм. Делается программный кольцевой FIFO (я использую 64 байта на rx и tx), управление потоком (порог 32 байта в моем случае, анализируемый ответ должен заведомо помещаться в эти 32 байта, иначе надо увеличить "по вкусу", ну и учесть возможный "выбег", после деактивации сигнала может еще что-то поступить, один-два байта типично). Получили "конец строки" - обрабатываем. Если не успеваем обработать - то все равно обработчик прерываний UART приостановит прием деактивацией сигнала управления потоком.

Цитата
Повторю вопрос, можно ли заставить сим деалать паузу между выдаваемыми строками?

Запретить прием деактивацией RTS. Естественно, надо включить аппаратное управление потоком для модема.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- zebrox   Алгоритм получения строки с СИМХХХ   Nov 22 2010, 13:02
- - Палыч   Что-то не пойму: в чём проблема? Принимайте символ...   Nov 22 2010, 13:15
- - zebrox   если ли по \r\n обрабатывать, то можно н...   Nov 22 2010, 14:51
|- - rx3apf   Цитата(zebrox @ Nov 22 2010, 17:51) если ...   Nov 22 2010, 14:57
|- - Палыч   Цитата(zebrox @ Nov 22 2010, 17:51) если ...   Nov 22 2010, 15:40
- - zebrox   А какие правильные установки порогов управления по...   Nov 22 2010, 15:11
- - skripach   Цитатаесли ли по \r\n обрабатывать, то м...   Nov 22 2010, 15:16
- - zebrox   ок, если паузу установить нельзя, тогда вопрос по ...   Nov 22 2010, 16:00
|- - rx3apf   Цитата(zebrox @ Nov 22 2010, 19:00) Прави...   Nov 22 2010, 16:03
- - zebrox   Ок, товарищ из третьего района, спасибо большое т...   Nov 22 2010, 16:09
|- - rx3apf   Цитата(zebrox @ Nov 22 2010, 19:09) тольк...   Nov 22 2010, 16:27
- - ArtemKAD   ЦитатаRTS-выставляем когда проц готов получать дан...   Nov 22 2010, 17:46
- - MKdemiurg   А не проще без прерывания принимать по флагу приём...   Nov 22 2010, 18:21
|- - M_Z   Цитата(MKdemiurg @ Nov 22 2010, 22:21) А ...   Nov 22 2010, 18:36
- - MKdemiurg   А если линейная программа , направлена ТОЛЬКО на п...   Nov 23 2010, 07:13
- - andrewlekar   Я делал так, что по прерыванию заполняется буфер, ...   Nov 23 2010, 08:06
- - mempfis_   Цитата(zebrox @ Nov 22 2010, 17:02) А как...   Nov 23 2010, 15:35
- - Alechek   Цитата(mempfis_ @ Nov 23 2010, 21:35) При...   Nov 25 2010, 13:39
- - mempfis_   Цитата(Alechek @ Nov 25 2010, 17:39) Ну з...   Nov 25 2010, 14:00


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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 10:41
Рейтинг@Mail.ru


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