| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Платформы Windows Mobile и Windows Embedded > Инициализация GPS модуля |
| Автор: danilsl 7.4.2009, 12:09 |
| Всем привет. Пишу прогу на кпк. Ей нужно обращаться к GPS модулю. На данный момент координаты я уже получаю, осталась только одна проблема: слишком долгая инициализация модуля. Как обращаться к апи я не знаю, так что просто открываю порт, на котором сидит gps и считываю данные. Проблема на открытии порта. Я его открываю в цикле, по 10 попыток в секунду. И этот цикл может висеть минут по 10. Причём скачаная с нета прога определяет координаты секунд за 20. Как можно ускорить процесс открытия порта? Пишу в 2005-й студии на C#. К порту обращаюсь компонентой SerialPort. Никаких полей кроме скорости не трогал, а скорости перебрал уже все. Никакого эффекта. Номер порта открываю тот, что указан в настройках кпк для доступа к нему нескольких приложений одновременно. |
| Автор: t_rex 7.4.2009, 13:20 |
| А на http://codeproject.com вроде был готовый кусок кода по работе с GPS через API, и там инициализация проходила в отдельном потоке чтобы не тормозить GUI. |
| Автор: Artemon 7.4.2009, 17:57 |
| 1. Порт нужно открывать ТОЛЬКО 1 раз, затем деажать его открытым, а в цикле читать из него информацию. 2. Читать порт обязательно нужно в отдельном потоке, иначе приложение не будет отвечать на любые взаимодействия пользователя с ним (это касается случая синхронного обращения к порту). 3. Есть такое понятие как альманах. Если устройство долгое время не включается и лежит с разряженой батареей, то альманах теряется и для начала получения корректных координат требуется примерно минута. |
| Автор: danilsl 8.4.2009, 07:35 | ||||
Дело в том, что порт я один раз и открываю. Условие выхода из цикла, который открывает порт
А все остальные итерации возвращают IOException. Цикл выполняется до открытия порта. Дальше начинается чтение. И ещё. В C# пришлось перейти из JAVA, в срочном порядке. Изначально хотел написать эту прогу на джаве, но оказалось, что конкретный девайс её не поддерживает. Времени на изучения языка не было(начальство срочно требует результат), поэтому не успел разобраться с потоками. По этой причине циклы открывающие порт и читающие с него данные выполняются как события таймера. Примерно так
А чтоб не висеть на чтении, то перед ним я проверяю свойство serialPort1.BytesToRead. Вот эта радость (открытие порта) и висит. Момент открытия порта и начала чтения данных однозначно определяет строка label1.Text = "Reading data..."; Так что тормозов на чтении нет однозначно. Да и координаты на карту гис как в аптеке проставляются. Вот ещё бы порт пошустрее открыть... |
| Автор: Experimenter 23.4.2009, 22:32 |
| danilsl, а ты SDK для WM5 или WM6 ставил? Там же готовые примеры есть под GPS API. Показано и как обращаться и т.д. и т.п. |
| Автор: myk 3.9.2009, 05:14 |
| подскажите чего делать при таком раскладе. serialPort1.Open(); выполняется без ошибки(IOExeption) если я GPS(встроенный) включаю в ДубльГис иначе порт не открывается. видимо есть какие то функции включения GPS приемника ничего найти немогу подскажите. |
| Автор: sn0wmen 28.11.2009, 10:25 |
| Есть замечательный чип ublox5 Единственное пока устройство на нем представленное в России - это http://npkintec.ru/index.php?section=catalog&razdel=3 Кстати российские разработчики. Для этого чипа на сайте производителя есть целая куча различных программ для конфигурирования и работы с устройством. http://u-blox.com/en/firmware.html Очень много полезного можно узнать и опробовать. Устройство довольно простое и надежное. Ребята-разработчики - молодцы. |