Сегодня я хотел бы поговорить об Embedded system. В частности, WinCE. Естественно, спор о том, считать ли ее или не считать Embedded, до сих пор так и не закончен. Надеюсь, что эта моя статья сможет подтолкнуть к написанию подобных статей и по другим системам, а также помочь вам сориентироваться в их многообразии.
Цель выпуска WindowsCE родилась из желания монополиста вторгнуться в совершенно новый для себя рынок программного обеспечения. Как всегда, Microsoft сделала это с грацией слона в посудной лавке.
Заключив договора с фирмами поставщиками PocketPC, Microsoft разрабатывает платформу для поддержки нескольких активных производителей от Intel StrongARM до Toshiba.
Список поддерживаемых платформ постоянно пополняется, и Microsoft громогласно заявляет о появлении единственно правильного выбора WinCE как основной системы для наладонников и портативных терминалов.
В связи с огромным парком программ под обычные Microsoft OS создатели идут по самому короткому пути. На деле урезается WindowsNT, открывается часть кода, остальная часть поставляется в библиотеках. Пишется сервисная часть под разработчика, вот и готова система WinCE. И, фактически оставив основу, Microsoft полноправно
заявляет о преемственности кода программ с Windows Desktop для WinCE с минимальной переработкой.
Однако, как и все другие детища, WinCE унаследует как силу, так и слабость своих прародителей.
Совершенствуется парк программ для разработчика, увеличивается количество программ под WinCE, добавляются в список поддерживаемые платформы. Но суть не меняется: WinCE по-прежнему остается всего лишь уменьшенной копией своих больших собратьев.
Несмотря на это - массовость поддержки и совместимость (относительно легкая для пользователя) с привычными настольными версиями - делают WinCE достойным конкурентом на рынке ОС для портативных компьютеров.
Для работы с готовой платформой Windows вам не понадобится большой переработки. Здесь
http://msdn.microsoft.com/vstudio/device/embedded/download.asp можно скачать все необходимое для начала разработки программ под Casio или любую другую систему под управлением WinCE.
Скачав Embedded Tools, в наборе вы получите два пакета SDK для старых версий и один пакет (возможно, уже поменяли) для новой версии WinCE. Естественно, для каждой платформы вам придется качать SDK от производителя, но чаще всего вместе с самим PocketPC вам вручат и диск
с SDK для него.
Установив все, вы получаете полный пакет для написания, компиляции и отладки программ, бегающих под WinCE. Внешне и качественно он мало отличается от VisualStudio соответствующих версий, такой же Wizard и похожие команды.
В комплекте с SDK идет и эмуляторы системы. Однако количество возможностей у них ограничено.
В качестве примера приведу один случай, когда при разработке национального интерфейса для WinCE 2.12 ваш покорный слуга столкнулся с необходимостью быстрой отладки визуального отображения текста в контролях Windows CE . "Зачем сгружать на железный аналог, когда можно в эмуляции отлаживать столь простые вещи," - наивно думал я. Отлаженная рабочая версия с поддержкой Unicode была написана и с успехом залита в PocketPC. Но когда запустил, ... результаты оказались плачевными - половина кода работала вовсе не так, как предполагалось и как работало на эмуляции. Я лично присутствовал на одной из презентаций Microsoft WinCE 3.0 и задал этот вопрос представителю фирмы, однако ни ответа внятного, ни реальной демонстрации возможностей эмуляции я не получил.
Еще один баг, ранее повсеместно мной наблюдавшийся и о котором я не могу не упомянуть, - это баг с загрузкой новой версии программы. Она грузится только один, два, максимум три раза, а затем, показывая процесс успешной загрузки, реально не меняет бинарник на диске. Это обходится выключением эмулятора и запуском его снова.
Так как даже при этом эмуляция намного быстрее, чем реальная отладка (debug) по COM порту или по USB на реальном устройстве, то стоит обратить внимание на эту возможность.
Итак, вы написали свою первую программу. Очень хорошо, задача ее проверить.
О первом способе эмуляции я уже говорил. Для него надо установить при генерации программы флажок для i386 Emulation поддержки для вашей программы и выбрать пункт Emulation для компиляции кода. По окончании компиляции вы получите предложение о перекачке программы в эмулятор, который запустится самостоятельно.
В эмуляторе напрочь отсутствуют все функции связи, которые работают - но при этом, естественно, ничего не передают. Проверив в эмуляторе или не проверяя, вы можете сделать то же и для PocketPC. Для этого выберите при создании пункт (совместно с предыдущим) поддержку нужной платформы. При компиляции укажите, для кого вы компилируете, и получите такое же предложение о загрузке программы в PockatPC.
Но для того, чтобы такая возможность была, вам нужно настроить еще одну программу - ActiveSync. Она идет на диске с вашим PocketPC и вполне может быть скачана, являясь бесплатной, с любого найденного Яндексом адреса. Ищется по названию абсолютно спокойно.
Если все уже настроено, то ваша программа средствами среды разработки будет сгружена на реальный носитель. Ваша программа попадает в стартовое меню, иногда на десктоп, в зависимости от версии WinCE.
Нажав Debug, вы будете приятно удивлены, когда сможете отлаживать программу дистанционно прямо на носителе, однако очень медленно, так как перекачка всей отладочной информации занимает много времени.
Естественно, таким образом невозможно отладить ни программы связи, ни что-либо, работающее в режиме ожидания или реального времени.
Для того, чтобы законченную и отлаженную программу можно было бы продавать, пользователь должен иметь возможность с помощью Install загружать программу в свой PocketPC. Для этого вам нужен InstallShield 6.3 - не выше, так как пока в 7.0 версии такой возможности не было (обратите внимание на сайт производителя, такие новости быстро меняются).
С его помощью можно, примерно как обычно для другой программы, создать пакет инсталляции для WinCE.
Вместе с комплектом разработчика вы получаете похожее на MSDN руководство по функциям для WinCE - обратите на него внимание, ибо очень многие функции внешне похожи, но имеют колоссальное отличие в работе. Так, для winCE в API для работы COM портом напрочь отсутствует возможность OVERLAPPED операций. В сокетах TCP/IP нет nonblocking-а. При работе с текстом вы сможете заметить, что работа с типом char* возможна почти, как и в обычных версиях, но из-за урезания и использования Unicode строки вам вывести на контроль Windows не удастся, так как все функции будут работать только с типом TCHAR.
Хотя для тех, кто работал с Unicode в обычных версиях, больших заморочек не будет. Все достаточно стандартно.
Также всегда хорошенько проверяйте работу каждой известной вам функции: невозможно перечислить все такие отличия, но их очень много, они мелки и при использовании часто не работают как надо. Особенно это касается функций WinAPI.
Удачи вам.