|
Как обрабатывать сообщение REMOTE IP: |
|
|
Guest_@Ark_*
|
Nov 8 2008, 13:23
|
Guests

|
Цитата(david_off @ Nov 8 2008, 16:00)  ... Пробовал, но программа получается дико несмотрибельной. При достаточном количестве команд, появлеются дикие деревья вложенных IF, Количество внеших IF стремится к размеру алфавита, а внутренних при одинаковых первых символах, также прибаляет новые внутренние ветки... Здесь снова все упирается в реализацию... Вообще-то, достаточно предварительно отсортировать весь набор ответов по алфавиту. И использовать процедуру бинарного поиска... Тогда все не так страшно - без диких деревьев и вложенных IF. И процесс распознавания очередного символа занимает не много времени...
|
|
|
|
|
Nov 8 2008, 13:45
|

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

|
Цитата(david_off @ Nov 8 2008, 15:00)  Не знаю что у вас за железо, но я это реализую на mega128+SIM300C. Чего то для этой парочки не слышал про какую-то ось. Ну, если люди умудряются в PIC-и с 8-ю килограммами памяти запихивать маленькие ОСьки, то в mega128 можно применить любую из доступных для МК  Здесь в конфе много инфы по этому вопросу. Но да ладно, это уже отход от существа вопроса. Просто, именно столкнувшись когда-то с задачей управлением модемом, я понял все прелести наличия ОСи, когда передача данных через модем - это только одна из N-цати задач, которые нужно решать одновременно.
|
|
|
|
|
Nov 8 2008, 15:47
|
Участник

Группа: Новичок
Сообщений: 37
Регистрация: 15-10-08
Из: Одесса, Украина
Пользователь №: 40 978

|
Цитата(Baser @ Nov 8 2008, 17:45)  Ну, если люди умудряются в PIC-и с 8-ю килограммами памяти запихивать маленькие ОСьки, то в mega128 можно применить любую из доступных для МК  Здесь в конфе много инфы по этому вопросу. Но да ладно, это уже отход от существа вопроса. Просто, именно столкнувшись когда-то с задачей управлением модемом, я понял все прелести наличия ОСи, когда передача данных через модем - это только одна из N-цати задач, которые нужно решать одновременно. Не знал что под мой зверёк тоже есть оси. Я думал оси пишут только для DSP и выше. Поищу. Может быть жить станет красивей. Кстати будет ещё интересно пару слов о ваших предпочтениях в этом вопросе. Наверняка будет много разных вариантов, львиную долю которых вы уже забраковали и лишите меня приятного права наткнулся на уже пройденные грабли. PS: cпасибо за просвящение.
|
|
|
|
|
Nov 8 2008, 17:19
|

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

|
Цитата(david_off @ Nov 8 2008, 17:47)  Кстати будет ещё интересно пару слов о ваших предпочтениях в этом вопросе. Наверняка будет много разных вариантов, львиную долю которых вы уже забраковали и лишите меня приятного права наткнулся на уже пройденные грабли. Извиняйте, тут я вам не советчик. Все времени нет плотно за это взяться Обычно, когда появляется подходящая задача, уже разбираться поздно - "нужно работу работать". В нескольких проектах применяю то, о чем писал выше. Почитайте эти ветки, судя по тому, что эти три RTOS выделили в отдельные подфорумы, они самые популярные среди местной братии
|
|
|
|
|
Nov 9 2008, 10:18
|

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

|
Цитата(Baser @ Nov 8 2008, 03:23)  А я так и не пойму, как при таком алгоритме можно принимать не только сообщения модема, но еще и данные, которые сыпятся по GPRS-у (или по CSD). Я уже писал об этом тут рядом. У меня основа алгоритма - кольцевой приемный буфер достаточного размера, чтобы разместить мах возможный пакет данных + несколько ответов модема, включая незапрашиваемые (unsolicited). Признак получения данных - таймаут (дырка в данных) в ~50ms После чего начинает работать обработчик по разбору всего, что пришло (причем в это время могут начинать валится новые данные, они попадут дальше в кольцевой буфер и будут обработаны позднее) Обработчик сверяет по шаблону все нужные ответы. Если ответ найден, он стирается, если нет, то ожидаются еще данные в пределах максимального времени ожидания ответа на данную команду (эти времена у меня разные для разных команд, мах несколько минут). Если за это время ожидания не обнаружено требуемых в данном месте ответов, то обработчик выдает ошибку, весь приемный буфер очищается и продвигаемся далее по алгоритму обработки ошибок. Тут имейте в виду, что ответы модема не только часто состоят из нескольких строчек, но и еще в разных условиях они могут менять свой порядок.  Я как-то об этом писал. Еще добавлю, что работать с модемом без операционки я не рискую, уж больно большой гемор Правда, я сам полноценную ОС не использую, а применяю ее зачаток, где кроме главного цикла и прерываний есть еще один поток, в котором выполняются модемные процедуры и можно применять "ожидания событий", во время которых крутится главный цикл (ну и прерывания ессно)  А почему бы еще плюсом очереди (queue) не использовать?
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|