|
|
 |
Ответов
|
Nov 7 2008, 22:23
|

Просто Che
    
Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881

|
Цитата(david_off @ Nov 7 2008, 13:19)  В моей программе все сообщения обрабатываются по установке флага получения нового сообщения. Анализатор флага работает так: получив CRLF (начало) - начинает ожидать CRLF(конец). Как только получен конец - флаг устанавливается. Обработчик сообщений, получив флаг, смотрит в буфер и обрабатывает пришедшее сообщение. После обработки флаг сбрасывается. А я так и не пойму, как при таком алгоритме можно принимать не только сообщения модема, но еще и данные, которые сыпятся по GPRS-у (или по CSD). Я уже писал об этом тут рядом. У меня основа алгоритма - кольцевой приемный буфер достаточного размера, чтобы разместить мах возможный пакет данных + несколько ответов модема, включая незапрашиваемые (unsolicited). Признак получения данных - таймаут (дырка в данных) в ~50ms После чего начинает работать обработчик по разбору всего, что пришло (причем в это время могут начинать валится новые данные, они попадут дальше в кольцевой буфер и будут обработаны позднее) Обработчик сверяет по шаблону все нужные ответы. Если ответ найден, он стирается, если нет, то ожидаются еще данные в пределах максимального времени ожидания ответа на данную команду (эти времена у меня разные для разных команд, мах несколько минут). Если за это время ожидания не обнаружено требуемых в данном месте ответов, то обработчик выдает ошибку, весь приемный буфер очищается и продвигаемся далее по алгоритму обработки ошибок. Тут имейте в виду, что ответы модема не только часто состоят из нескольких строчек, но и еще в разных условиях они могут менять свой порядок.  Я как-то об этом писал. Еще добавлю, что работать с модемом без операционки я не рискую, уж больно большой гемор Правда, я сам полноценную ОС не использую, а применяю ее зачаток, где кроме главного цикла и прерываний есть еще один поток, в котором выполняются модемные процедуры и можно применять "ожидания событий", во время которых крутится главный цикл (ну и прерывания ессно)
|
|
|
|
|
Nov 9 2008, 10:18
|

Местный
  
Группа: Свой
Сообщений: 331
Регистрация: 22-07-08
Из: Р О С С И Я
Пользователь №: 39 145

|
Цитата(Baser @ Nov 8 2008, 03:23)  А я так и не пойму, как при таком алгоритме можно принимать не только сообщения модема, но еще и данные, которые сыпятся по GPRS-у (или по CSD). Я уже писал об этом тут рядом. У меня основа алгоритма - кольцевой приемный буфер достаточного размера, чтобы разместить мах возможный пакет данных + несколько ответов модема, включая незапрашиваемые (unsolicited). Признак получения данных - таймаут (дырка в данных) в ~50ms После чего начинает работать обработчик по разбору всего, что пришло (причем в это время могут начинать валится новые данные, они попадут дальше в кольцевой буфер и будут обработаны позднее) Обработчик сверяет по шаблону все нужные ответы. Если ответ найден, он стирается, если нет, то ожидаются еще данные в пределах максимального времени ожидания ответа на данную команду (эти времена у меня разные для разных команд, мах несколько минут). Если за это время ожидания не обнаружено требуемых в данном месте ответов, то обработчик выдает ошибку, весь приемный буфер очищается и продвигаемся далее по алгоритму обработки ошибок. Тут имейте в виду, что ответы модема не только часто состоят из нескольких строчек, но и еще в разных условиях они могут менять свой порядок.  Я как-то об этом писал. Еще добавлю, что работать с модемом без операционки я не рискую, уж больно большой гемор Правда, я сам полноценную ОС не использую, а применяю ее зачаток, где кроме главного цикла и прерываний есть еще один поток, в котором выполняются модемные процедуры и можно применять "ожидания событий", во время которых крутится главный цикл (ну и прерывания ессно)  А почему бы еще плюсом очереди (queue) не использовать?
|
|
|
|
Сообщений в этой теме
david_off Как обрабатывать сообщение REMOTE IP: Nov 7 2008, 11:19 FormatCft Цитата(david_off @ Nov 7 2008, 16:19) В м... Nov 7 2008, 11:28 _zag_ Цитата(FormatCft @ Nov 7 2008, 15:28) ИМХ... Nov 7 2008, 11:49 PIC_Embedder У меня получилось что-то среднее. Алгоритм такой. ... Nov 7 2008, 12:31 david_off Цитата(PIC_Embedder @ Nov 7 2008, 16:31) ... Nov 7 2008, 12:38  _zag_ Цитата(david_off @ Nov 7 2008, 16:38) неп... Nov 7 2008, 13:54   david_off Думал, думал и надумал...
По суте у меня выбор ме... Nov 7 2008, 16:24    @Ark Цитата(david_off @ Nov 7 2008, 19:24) Дум... Nov 7 2008, 17:11     david_off Цитата(@Ark @ Nov 7 2008, 21:11) Предложу... Nov 7 2008, 18:30      @Ark Цитата(david_off @ Nov 7 2008, 21:30) Вы ... Nov 7 2008, 18:53       david_off Цитата(@Ark @ Nov 7 2008, 22:53) Здесь, к... Nov 7 2008, 20:00        @Ark Цитата(david_off @ Nov 7 2008, 23:00) Нав... Nov 8 2008, 00:14  PIC_Embedder Цитата(david_off @ Nov 7 2008, 16:38) неп... Nov 7 2008, 15:40 david_off Цитата(Baser @ Nov 8 2008, 02:23) А я так... Nov 8 2008, 13:00  @Ark Цитата(david_off @ Nov 8 2008, 16:00) ...... Nov 8 2008, 13:23  Baser Цитата(david_off @ Nov 8 2008, 15:00) Не ... Nov 8 2008, 13:45   david_off Цитата(Baser @ Nov 8 2008, 17:45) Ну, есл... Nov 8 2008, 15:47    Baser Цитата(david_off @ Nov 8 2008, 17:47) Кст... Nov 8 2008, 17:19
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|