Архивы: по дате | по разделам | по авторам

Мобильные устройства, вид изнутри

Архив
автор : Дмитрий Майоров   25.01.2002

В прессе публикуется немало обзоров, где сравнительный анализ разнообразных мобильных устройств дается, так сказать, с точки зрения пользователя. Цель данной статьи - взглянуть на предмет "изнутри", оком программиста, создающего для мобильных устройств приложения.

В прессе публикуется немало обзоров, где сравнительный анализ разнообразных мобильных устройств дается, так сказать, с точки зрения пользователя. Цель данной статьи - взглянуть на предмет «изнутри», оком программиста, создающего для мобильных устройств приложения.

Чтобы не пытаться объять необъятное, ограничимся устройствами, которые:

  • помещаются в карман;

  • имеют возможность беспроводной связи с внешним миром (другими компьютерами).

Формально под это определение подходят сотовые телефоны с WAP и i-Mode. Однако по причине закрытости про их внутренности известно немного. Впрочем, это и не нужно. С точки зрения разработчика вполне достаточно рассматривать их как еще один браузер, которому надо выдавать страницы на соответствующем языке, оптимизированные под маленький экран. Поэтому в дальнейшем я сосредоточусь на устройствах, в которые можно загружать программы. Как правило, для них тоже существует какой-никакой браузер. Но бывает, что он стоит отдельных денег, не предоставляет нужного уровня безопасности или просто не подходит для решения поставленной задачи. Вот тогда приходится засучивать рукава и программировать.

Сгруппированы устройства естественным для программиста образом - по типу операционной системы и отсортированы по алфавиту.

BREW (www.qualcomm.com/brew)

Binary Runtime Environment for Wireless (система выполнения двоичных программ для беспроводных устройств) разработана компанией Qualcomm, поддерживается производителями CDMA телефонов и продвигается сотовыми операторами, работающими в стандарте CDMA.

Система команд ARM, практически все остальное определяется конкретным телефоном. В любом случае ресурсов совсем мало. TCP/IP-стек есть.

SDK, доступный с сайта производителя, позволяет скомпилировать приложение и запустить его на PC. Под настоящий телефон приложение придется перекомпилировать с помощью другого SDK, который уже стоит денег. И распространять потом приложение просто так не получится, этим будет заниматься сотовый оператор. Предварительно придется каждое приложение сертифицировать.

Телефонов с BREW пока совсем немного. Пример: LG CX-300L.

Java (java.sun.com/j2me)

Про Java применительно к мобильным устройствам говорят очень давно, а вот результатов пока не так много. J2ME поддерживается рядом сотовых телефонов Motorola, RIM объявил о переходе на J2ME и продемонстрировал прототип, в пресс-релизах Symbian и Palm Java тоже фигурирует, но пока все еще чего-то не хватает. Сборка мусора на устройствах с ограниченной памятью не очень эффективна, сама виртуальная машина тяжеловата, необходимость постоянно обращаться к специфичным для конкретной операционной системы функциям мешает воплощению красивой идеи «пишем единожды, запускаем везде». Конечно, разработчикам давно уже надоело самостоятельно следить за памятью и думать, сколько байт отвести вот под этот буфер. Завидно, на серверной стороне уже давно таких проблем нет. Если не Java, так библиотека классов вроде STL помогает. Но, похоже, на устройствах какое-то время еще придется поработать дедовскими методами, экономя байты, такты и миллиампер-часы и борясь то с утекающей памятью, то с мистическими ошибками из-за обращения к раньше времени освобожденному объекту.

PalmOS (www.palmos.com)

Маломощный процессор Motorola DragonBall VZ. Приятное следствие - большое время работы от одного комплекта батарей. Менее приятное следствие - для некоторых задач процессорной мощности просто не хватает. Например, шифрование сессионного ключа по алгоритму RSA (1024 бита) занимает малоприемлемые 18 минут. Устройство при этом даже немного нагревается.

Процессор 16-разрядный, но адресное пространство 32-разрядное. Поэтому 64-килобайтные барьеры встречаются, но не так часто и неприятно, как при программировании для DOS (помните еще такую операционную систему?). Система команд процессора - как у старых «Макинтошей». Правда, особой необходимости писать на ассемблере нет.

Однозадачная операционная система с простым и удобным API. Управляемая событиями, но не объектно-ориентированная. Вместо жесткого диска - flash-память. Flash порублен на кусочки (записи) и результат гордо назван «базой данных». К записям можно обращаться прямо по указателю (предварительно пометив запись как неподвижную), а вот писать уже приходится с помощью отдельной функции API. Файловая система эмулируется на уровне API операционной системы, но лучше пользоваться базами данных - быстрее намного и оперативная память экономится.

Несмотря на то, что способов связать Palm с внешним миром существует много, изнутри они все сводятся к одному из двух вариантов:

  • TCP/IP-стек, предоставляемый библиотекой NetLib;

  • API для работы с HTTP, предоставляемый библиотекой INetLib.

Для PalmVII, работающего через встроенный радиомодем и palm.net, второй вариант является единственным.

Из всех мобильных устройств писать программы для PalmOS легче всего. Простая операционная система, множество программ с исходным кодом, активные программистские форумы, широкий выбор средств разработки (особо рекомендую falch.net DeveloperStudio).

Главная проблема - нехватка оперативной памяти. Приходится все данные, даже временные, распихивать по базам данных. Признаком того, что память на устройстве кончилась, является не сообщение об ошибке, а падение программы в совершенно неожиданном месте по причине того, что стек наехал на статические данные.

Главное преимущество - настоящий честный эмулятор. Он эмулирует только аппаратуру, внутри бежит настоящая PalmOS, и поэтому поведение программы в эмуляторе очень редко отличается от поведения ее же на реальном устройстве.

Компания Palm не только делает устройства самостоятельно, но и лицензирует PalmOS другим производителям. В результате появляются такие интересные экземпляры, как HandSpring Treo и HandEra 330.

Более мощные устройства на базе Windows CE теснят Palm на рынке. Текущая архитектура не позволяет существенно увеличить мощность, поэтому Palm принял рискованное решение перейти на более быстрый 32-разрядный процессор ARM. Вместо того, чтобы переписывать операционную систему заново с нуля самостоятельно, была куплена команда разработчиков вместе с кодовой базой у испытывавшей серьезные финансовые проблемы фирмы Be. Скорее всего для обеспечения совместимости с приложениями, написанными для предыдущих версий PalmOS, в состав новой версии будет включен эмулятор.

Решение рискованное в первую очередь потому, что за увеличение процессорной мощности придется заплатить размером и ценой устройства, а так же сроком жизни батарей. И закон Мура не поможет, на батареи он не очень-то распространяется. Иначе мы бы уже на электромобилях ездили. Кроме того, конкуренция между PalmOS и Windows CE станет совсем прямая - аппаратура-то будет практически одинаковая. Не так уж много фирм на сегодняшний день могут похвастаться успехами в прямой конкурентной борьбе с Microsoft.

RIM (www.rim.net)

Канадская фирма Research in Motion выпускает двусторонние пейджеры и построенную на их основе систему доступа к электронной почте Blackberry. Система эта очень популярна среди больших компаний (особенно финансовых) в США и Канаде. Для удаленного доступа к почте Blackberry оказывается дешевле в покупке и эксплуатации и удобнее, чем ноутбук с модемом.

RIM построен на базе процессора Intel 386 с низким энергопотреблением. Старые устройства (RIM 850, 950) работают от одной обычной батарейки АА, которой хватает надолго. Более новые и дорогие (RIM 857, 957) оснащены встроенным аккумулятором. Устройства имеют 5 Мбайт flash-памяти и 512 Кбайт RAM.

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

Радиомодем обеспечивает посылку и прием пакетов размером до 512 байт. Стека TCP/IP поверх нет, и даже если сделать его самостоятельно, то получится медленно и неэффективно. Приходится делать свой транспортный уровень, который обеспечивает разбиение длинного сообщения на части и последующую сборку. Прямого доступа в Internet у RIM пейджеров нет, для связи необходимо устанавливать специальный gateway.

Пейджинговые сети лучше работают в случае перегрузки. Утром 11 сентября сотовые телефоны в Нью-Йорке были практически бесполезны - уровень сигнала нормальный, а позвонить нельзя. Все вокруг тоже пытаются позвонить, а у соты есть лимит на количество одновременных соединений. RIM-пейджеры работали. Сообщения шли заметно медленнее, чем обычно, но доходили.

Операционная система своя, внутри немного похожа на Win32. Многозадачность добровольная, каждая задача должна изредка проявлять вежливость и давать жить другим, вызывая RimTaskYield(). Если вежливость не проявлять, это может тоже закончиться ошибкой - долгая обработка сообщений на RIM недопустима. Приложения представляют собой DLL, собираются с помощью Microsoft Visual C++. RIM предоставляет SDK, в состав которого входят библиотеки, документация, примеры и симулятор. Последний позволяет запускать и отлаживать на машине разработчика специальным образом построенные приложения. Удобно, но соответствие не полное. Приложение может работать на симуляторе, но рушиться на устройстве. Падение сопровождается лаконичным сообщением вроде «Device Error 264» и последующей перезагрузкой. Несмотря на то, что в документации наиболее часто встречающиеся коды ошибок истолкованы, помогает такая диагностика не сильно.

До последнего времени RIM-пейджеры работали в сетях Mobitex и DataTAC, распространенных только в США и Канаде. С выходом Blackberry 5820, поддерживающего GPRS, RIM начал атаку на европейский рынок. Не исключено, что скоро эти устройства доберутся и до России.

Symbian (www.symbian.com)

Эта операционная система разработана британской фирмой Psion и была ранее известная под названием EPOC32. Система многозадачная, многопоточная, объектно-ориентированная, мало на что похожая и сложная. Настолько, что времени на написание нормальной документации и примеров у авторов явно не осталось. Поэтому процесс программирования часто перемежается увлекательными поисками тривиальных фактов. Система выполняется на быстрых 32-разрядных процессорах семейства ARM. Как обычно, есть TCP/IP-стек.

Более запутанных средств разработки я не встречал. Используется сложная комбинация из Visual C++, GCC, скриптов и многочисленных командных файлов с названиями вроде doebld.bat. Честного (похожего по поведению на настоящее устройство) эмулятора нет, есть нечестный WINS.

Концерн Symbian (Ericsson, Nokia, Matsushita, Motorola и Psion) обещает использовать эту систему повсюду. Хорошие примеры - Nokia 9210 и 7650.

Перспективы у системы не очень радужные. Psion уже объявил о прекращении разработки собственных устройств. Единственная надежда на то, что Java под Symbian спрячет «особенности» операционной системы от программистов и позволит им разрабатывать приложения, а не бороться с системой.

Windows CE (www.microsoft.com/windows/embedded/ce)

Фирма Microsoft по разным и не всегда очевидным причинам меняет названия продуктов со сменой версий. В результате возникает терминологическая путаница. Операционная система от Microsoft для мобильных устройств в разное время называлась Windows CE, Pocket PC и Pocket Windows, следующая версия будет называться Windows CE .Net. В рамках данной статьи я буду придерживаться названия Windows CE.

Система многозадачная, многопотоковая, работает в защищенном режиме (падение одного приложения не ведет к перезапуску всей системы). Поддерживаются несколько типов процессоров: ARM, StrongARM, MIPS, SH3, SH4, x86 (все 32-разрядные). API похож на Win32, хорошо знакомый по обычным Windows. Повсюду Unicode, что делает интернационализацию тривиальной, но вместо удобного UTF8 почему-то используется UTF16. Microsoft заявляет (судя по результатам независимых тестов, проведенных фирмой Dedicated Systems Experts, не без оснований), что начиная с версии 3.0 Windows CE является системой реального времени. В этом качестве она представляет собой угрозу таким классикам жанра как QNX и VxWorks. Наличие GameAPI (аналог DirectX) очень немаловажно для разработки игр.

В отличие от других игроков на рынке мобильных устройств фирма Microsoft обладает достаточными ресурсами для того, чтобы написать большое количество программного обеспечения самостоятельно. Дело не ограничивается карманными версиями Word и Excel - существует даже SQL Server 2000 Windows CE.

Типичное Windows CE устройство может связываться с внешним миром через сотовый телефон с IrDA интерфейсом или с помощью PCMCIA карты (с телефоном внутри или радиомодемом). С точки зрения программы это просто TCP/IP стек.

Среду разработки Microsoft с радостью предоставит. За отдельные деньги. К компилятору (Visual C++) претензий нет, а вот «эмулятор» оставляет желать лучшего. Microsoft ограничился переходником, переводящим вызовы большинства функций WinCE API в соответствующие функции Win32 API на той самой машине, где идет разработка. Как следствие, поведение программы под таким «эмулятором» может сильно отличаться от поведения ее же на реальном устройстве, что существенно снижает пользу от эмулятора. Наряду с использованием эмулятора отладка из среды разработки возможна непосредственно на самом устройстве (когда оно соединено с PC). Это очень медленно, но все возможности сохраняются.

Характерный представитель - Compaq iPAQ Pocket PC H3650.

В целом, на мой взгляд, для мобильных устройств система тяжеловата. Зато на нее проще переносить продукты, написанные для обычных операционных систем, и легче переходить программистам, ранее знакомым с Win32 API. Да и просто чувствовать Microsoft в качестве партнера, а не конкурента, многим нравится больше.

Малоперспективные системы

В эту категорию, по моему мнению, попадают:

  • GEOS. Nokia Communicator 9110 еще выпускается, но Nokia официально заявила о переходе на Symbian.

  • Wisdom OS. Фирма Motorola разработала эту систему для своих двусторонних пейджеров семейства PageWriter. Пейджеры работают на очень медленной сети ReFlex. Единственным языком программирования является FLEXScript, слегка напоминающий Basic.

  • Siemens IC35. 8-разрядный процессор Z80 возбуждает ностальгию по студенческим годам и ZX Spectrum, но и только.

  • Linux. Я прекрасно понимаю, почему Linux хорош на стороне сервера. Сам активно пользуюсь. В некоторых случаях он хорош на настольном компьютере. Но попытки запихать его в мобильное устройство могу объяснить разве что спортивным интересом. Получить telnet и xterm можно и менее сложным способом. Кстати, идея применить хорошую серверную систему не по назначению имеет историю. Помните Windows NT Embedded?

В целом наличие на рынке такого количества разнообразных мобильных устройств и операционных систем для них, мало совместимых между собой, делает этот сектор более динамичным и менее предсказуемым, чем мир «больших» компьютеров. Высока вероятность того, что в результате естественного отбора (особенно в условиях нынешнего экономического кризиса на Западе) некоторые системы относительно быстро потеряют свою долю рынка, изменятся до неузнаваемости или вовсе исчезнут. Так что перед тем, как начинать программировать для конкретного мобильного устройства, стоит подумать еще раз: может быть, все-таки можно обойтись уже имеющимся там браузером?


При создании новой операционной системы всегда встает вопрос «курицы и яйца»: чтобы система стала широко распространенной, для нее должны существовать прикладные программы. Но компании-разработчики таких программ обычно предпочитают поддерживать только самые распространенные и популярные системы (чем больше потенциальных пользователей, тем легче оправдать затраты на разработку). Когда Palm впервые появился на рынке, существовал один способ разработки приложений для него: пользоваться коммерческим компилятором CodeWarrior от компании MetroWerks и тестировать приложения непосредственно на устройстве. CodeWarrior стоит немалых денег и отличается непривычным для большинства разработчиков макинтошеподобным графическим пользовательским интерфейсом, цикл «компиляция-загрузка-запуск» занимает много времени, диагностики на самом устройстве практически никакой, поэтому мало кому хотелось в таких условиях программировать.

И вот в этот момент несколько энтузиастов в корне изменили ситуацию. Darrin Massena написал ассемблер PilA, Jeff Dione сотоварищи адаптировали компилятор GCC, Wes Cherry сделал компилятор ресурсов. Этот набор инструментов под названием PRC-Tools распространялся бесплатно и позволял заниматься разработкой как под Windows, так и под UNIX.

В сочетании с эмулятором CoPilot, который к тому времени сделал еще один энтузиаст по имени Greg Hewgill, появилась альтернативная бесплатная среда разработки. И дело пошло в гору. Сначала любители начали писать мелкие утилиты, увидев тенденцию, к ним присоединились коммерческие компании, и проблема «курицы и яйца» решилась. Практически без участия компании Palm.

Справедливости ради надо отметить, что впоследствии Palm взяла-таки под свое крыло CoPilot, переименовав его в Palm OS Emulator, а также поддерживает теперь не только CodeWarrior, но и PRC-Tools.


© ООО "Компьютерра-Онлайн", 1997-2024
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.