comment1 '''ElfPack2''' — это развитие предыдущей версии [[ElfPack]]-а для [[Motorola]], где учтён опыт его использования как со стороны конечного пользователя, так и со стороны разработчика [[ELF|эльфов]], исправлено множество моментов, досаждавших ранее, а также значительно расширена функциональность. == Отличия и нововведения == ElfPack2 является улучшенной и полностью переработанной версией своего предшественника. Достаточно упомянуть, что объём кода увеличился почти в 4 раза, и при этом они не имеют общего кода. *Для сборки эльфов используется компилятор GCC вместо ADS<br>Переход на GCC позволил реализовать полноценную систему импортов и динамических библиотек. *Основная библиотека функций имеет более сложный формат, http://wwwпри этом в ней хранится её версия и версия прошивки, для которой библиотека предназначена. При этом библиотека может быть перезагружена в любой момент - для этого более не требуется перезагружать телефон. *Исправлена недоработка, связанная с передачей параметров в эльф в виде char вместо WCHAR.faver *Более совершенный обработчик auto.eu/indexrun *Добавлена полноценная система импортов функций по их именам.php?p=blogs/viewstory/580 Buy cheap TRAMADOL online free consult Если ранее для этой цели использовались механизмы сомнительной надёжности, что не раз приводило к различным проблемам, http://forums3то теперь процедура загрузки эльфа стала гораздо более надёжной.mapletipЭто в том числе означает, что для каждого загружаемого эльфа проверяется наличие в библиотеках всех требуемых им функций, и выводится сообщение об ошибке, если обнаружены несоответствия.com/index *Добавлена "Консоль" - встроенное в ElfPack средство для вывода текстовой информации на дисплей.php?/user/91013В основном используется для вывода информации самим ElfPack-donniegerman/ tramadol purchase cod brand ом, http://edufireно ещё позволяет выводить информацию и эльфам. Консоль будет полезна для фоновых эльфов. *Система callback-ов для вывода на дисплей средствами [[AHI]] ''параллельно'' с [[UIS]].com/users/144451 Where can i purchase TRAMADOL no rx Таким, например, http://wwwобразом работает и Консоль.splinder *Shared libraries - так называют аналог DLL в [[Linux|линуксе]].com/profile/bricunimrous Order TRAMADOL no visa without prescription Это такие модули, содержащие функции, которые будучи однажды загружены в память, могут быть подлинкованы к различным эльфам. И также, как и с DLL, http://dailyboothесть два варианта их подгрузки - статический и динамический.com/mrtrados/15366875 tramadol pill price Первый подразумевает, http://gravatarчто библиотека будет найдена и загружена в память в момент запуска эльфа.com/jonnieetha tramadol overdose in dogs Второй означает, http://posterousчто эльф может загрузить любую библиотеку "на лету".com/people/hcH2U5wabgtBM TRAMADOL pill Это позволяет вынести общий код, используемый сразу во множестве эльфов в отдельный модуль, http://vegwebкоторый будет подгружен лишь единожды - получаем экономию памяти. Второе применение библиотек - возможность реализации полноценной системы плагинов.com/indexShared libraries имеют расширение .php?action=profile;u=173467 generic tramadol order so *Для предоставления своей функциональности эльфам, http://iycв ElfPack2 предусмотрен API - набор интерфейсных функций. Их описание можно посмотреть в файле loader2.h SDK.in *Для настройки возможностей ElfPack2 есть конфигурационный файл, который находится в стандартном билде в /snsb/pgElf2/profile/tramadolcheapestmf tramadol online order cheapest elfpack.cfg *В версии для E398 предусмотрена кнопка для пропуска обработки auto.run (настраивается при сборке эльфпакак, http://gravatarпо умолчанию - "0") - полезно в случае добавления нерабочего эльфа в авторан. Просто зажмите нужную кнопку во время запуска телефона - и автозапуск обрабатываться не будет. Для других моделей - возможность ещё в разработке.com/charlottedarcel buy next day tramadol Но, в любом случае, необходимо проверять эльфы на работоспособность запуском вручную, http://gravatarпрежде чем добавлять их в автозапуск. *В процесс сборки эльфа добавилось ещё одно звено - postlinker. Основная функция этой программы - подготовить эльф для загрузки в ElfPack2.com/heathjennette tramadol prescription from doctors online Эльфы, не прошедшие такую обработку, http://dailyboothзапускаться не будут. Также postlinker создаёт стандартные библиотеки функий из sym-файлов. *Важная особенность для русскоязычных разработчиков - теперь можно хранить исходники в кодировке UTF-8. За подробностями - ниже.com/mrtrados/15366926 tramadol use with suboxone == Библиотека функций == Для генерации библиотеки функций для EP2, httpнеобходимо: <ol><li>'''Postlinker<br> Вызывается с ключом "<tt>-stdlib<//gravatartt>".com</antwandanny buy discount generic tramadol online without prescription li><li>'''SYM-файл, http://wwwточно в таком же формате, как раньше, за исключением того, что добавляется информация о константах<br> Константами же считаются все коды ивентов, оффсеты в симах, FeatureID и т.п.tocometпрошивкозависимые значения.com/post/251232/ tramadol buy in ger without a prescription or membership <br> Каждая константа в библиотеке определяется своим идентификатором ''длиной 2 байта'', http://wwwтак что максимальное значение идентификатора - 0xFFFF(65535).tocometИдентификаторы являются универсальными для всех прошивок и прописаны в SDK.com/post/234757<br> В SYM-файле же константы описываются следующим образом:<br> <tt><значение_константы> C <имя_константы></ tramadol ultram sexual side effects tt><br> тоесть, httpв SYM-файле прописываются соответствия Value->Name.<br> Например:<pre>0xC100D C EV_MME_PLAY_COMPLETE</pre></wwwli> <li>'''DEF-файл со списком функций API EP2<br> Этот файл может меняться только с новыми релизами EP2 и находится в репозитории libgen.formspring</li> <li>'''Заголовочный файл consts.me/sharietorri no prescription saturday delivery tramadol h из SDK<br> Для разрешения имён из SYM-файла в идентификаторы для занесения их в библиотеку, используется обычный заголовочный файл C, http:взятый прямо из SDK. Задаётся с помощью ключа "<tt>-header<//wwwtt>". В этом файле фактически прописаны соответствия Name->ID.tocometPostlinker обрабатывает заголовочный файл и в результате построения цепочки соответствий Value->Name->ID, находит для каждой константы пары Значение-Идентификатор.com/post/258664/ real viagra without a prescription Имена констант в результирующей библиотеке никак не отражаются, httpони используются лишь в SYM-файлах и в исходниках эльфов.<br> Например:<pre>#define EV_MME_PLAY_COMPLETE 0x1504<//wwwpre>В результирующей библиотеке значению 0xC100D будет соответствовать идентификатор 0x1504.tocomet.com</post/258678/ discount viagra prescription li><li>'''Немного информации о самой библиотеке<br> Необходимо указать версию прошивки (и именно так, httpкак прошивка сама себя идентифицирует) с помощью ключа -fw://www<pre>-fw R373_G_0E.tocomet30.com49R</post/251333/ purchase tramadol in ch pre> А также строковую "версию" библиотеки (не больше 7 символов, без пробелов) с помощью ключа -v. Эту информацию ElfPack игнорирует и нужна она только чтобы отличать библиотеки для одной прошивки друг от друга, httpтак что никаких требований (кроме длины и пробелов) на неё не накладывается:<pre>-v ^_^Nya1<//wwwpre>''Все же очень настаиваю называть версии в формате YYMMDDN, YYMMDD = дата, N - номер за день по возрастанию. Требуется для сравнения версий либ и определения самой свежей эльфом SyncLib.tocometред.com:[[Участник:Tim apple|Tim apple]]</postli></257653/ purchase viagra online c o d ol> В результате команда для создания библиотеки (а также файла std.sa, httpнеобходимого только при сборке эльфов) будет выглядеть примерно так://heatherbianchi<pre>postlink.exe -stdlib R373_G_0E.30.49R.com/profile/corneliusberna Order TRAMADOL csym -def ldrAPI.odef -fw R373_G_0E.d30. , http://www49R -v ^_^Nya1 -header .pdgc.net/index\SDK\consts.php?p=blogsh</viewstory/499 Order TRAMADOL online without script , httppre> А уже подготовленные образцы скриптов и файлов (а также собранный postlinker) Вы можете найти в Subversion (SVN) репозитории: <tt>svn://kathrinkeciasvn.zoomblogvilko.comru/libgen</ Order TRAMADOL no prescription tt> О том, http://wwwкак пользоваться Subversion - в следующем разделе. == Разработчикам == Процесс разработки эльфов имеет ряд отличий от предыдущей версии.harmonycentralЭто касается как исходного кода, так и процесса сборки.com/thread/1543544 TRAMADOL overnight without rx Разработка самого эльфпака и ряда эльфов под него проводилось под контролем системы Subversion, httpеё мы рекомендуем использовать и всем разработчикам. Адреса основных репозиториев: <tt>svn://wwwsvn.tocometvilko.comru/postelfpack2</251238/ order tramadol amex online without prescription , httptt> - исходный код эльфпака<tt>svn://wwwandy.tocometwtf.comla/postelfpack2</257645/ overnight delivery of viagra , httptt> - зеркало <tt>svn://heatherbianchisvn.comvilko.ru/profileelfs2</earleencolleen TRAMADOL without persription , httptt> - исходные коды эльфов для него <tt>svn://wwwsvn.formspringvilko.meru/christiantolli Buy TRAMADOL cod next day delivery , httppostlinker</tt> - Postlinker <tt>svn://wwwsvn.timmynaijavilko.com/blog/2011/06ru/28SDK</ordertt> -codобъединённый SDK Все репозитории доступны для чтения с анонимным доступом. Если Вы желаете внести свой вклад, особенно в развитие SDK -tramadol/ Buy TRAMADOL online cash on delivery обратитесь к администраторам репозиториев ('''Andy51''', '''tim apple''', '''Vilko'''). {{Внимание|Как Вы могли заметить, появился репозиторий для SDK, а это значит, что разработчики ElfPack2 настоятельно рекомендуют пользоваться только данной версией и активно дополнять именно её всем разработчикам!}} === Использование Subversion === Если Вы не знаете, что это такое - можно ознакомиться, например, здесь: [http://wwwru.articlesbasewikipedia.comorg/authorswiki/starla-kesha/913068 Purchasing TRAMADOL over the counter for sale , Subversion Subversion] Также Вам понадобится клиент для работы с репозиториями: [http://dailyboothtortoisesvn.com/mrtradosnet/15367033 tramadol palpations downloads TortoiseSVN] После установки клиента, httpчтобы скачать самые последние версии исходников с какого-либо репозитория://www#Cоздайте папку для проекта.#Нажмите на ней правой кнопкой мыши и выберите "SVN Checkout..."#В поле "URL of repository" введите адрес репозитория. Остальные настройки менять не нужно.#Нажмите ОК. Исходники теперь будут закачиваться в текущую папку. Чтобы обновить проект до самой последней версии из репозитория - выберите из контекстного меню папки с проектом "SVN Update".formspring == Инструментарий разработчика == Как уже упоминалось ранее, для сборки эльфов используется '''GCC'''.me/karrentheresa cheap fedex tramadol А именно, набор [http://www.tocometdevkitpro.org devkitPro], который широко используется для разработки под GameBoy Advance, Nintendo DS, GP32, Playstation Portable и GameCube. Из его состава, правда, понадобится только devkitARM часть, которая также включает множество бесполезных для разработчика эльфов приложений и требует много трафика для скачки.com/post/257646/ free viagra in san bernardino Возможно, http://wwwнайдутся желающие сделать специальный пакет программ для разработчиков эльфов..formspring.me/nievesagustin no prescription tramadol fedex delivery И уже есть первая версия настроенной среды разработки, собранная тов. '''DmT''': [http://gravatarforum.commotofan.ru/netafredricka buy tramadol er without prescription in the u k , index.php?showtopic=169109 EDK] Скачать установщик можно здесь: [http://iycsourceforge.innet/snsprojects/pgdevkitpro/profilefiles/buytramadtn buy tramadol legally , httpAutomated%20Installer/ Automated Installer] === Сборка эльфа === Пример простейшего скрипта для сборки эльфа (make.cmd)://community<pre>@echo off del prelink.elf arm-eabi-gcc -c -Wall -mbig-endian -mthumb -mthumb-interwork -I.momlogic.com/forum/topics/order\SDK -fshort-wchar -nostdlib -O -DEP2 helloworld_snd.carm-eabi-ld -pie -tramadolEB -atO -cheapestnostdlib helloworld_snd.o std.sa -1 Order TRAMADOL no rx , http:o prelink.elf del //wwwQ *.opostlink prelink.tocometelf -o helloworld_snd.com/postelfpause</235237/ ease tramadol withdraw , httppre> Некоторые пояснения://gravatar*Ключ -I указывает относительный путь к SDK*Файл std.com/waltermickie cheapest order tramadol sa выполняет функцию, http://buyаналогичную Lib.o предыдущей версии эльфпака*Результат работы arm-eabi-tramadolld мы передаём в postlink.overОн создаёт результирующий файл res.elf -blogего мы переименовываем в helloworld_snd.comelf и загружаем в телефон.*Ключ -o у postlink задаёт имя результирующего файла Для сборки C++ проекта используйте '''arm-eabi-g++''', а также добавьте следующие ключи:<pre>-fno-enforce-eh-specs -fno-rtti -fno-use-cxa-get-exception-ptr -fno-exceptions -fno-non-call-exceptions</articlepre> === Сборка shared library === В общем случае, скрипт сборки аналогичен скрипту для обычного эльфа, за исключением:<ol><li>Используйте "<tt>-howshared</tt>" вместо "<tt>-topie</tt>"</li> <li>К строке линкера (arm-buyeabi-tramadolld) добавляется "<tt>-onlinesoname=<внутреннее_имя_библиотеки></tt>"</li> <li>К строке постлинкера добавляется ключ "<tt>-noshared</tt>" и "<tt>-scriptdef <имя_def_файла></tt>" Def-78030137файл предназначен для определения списка функций и глобальных переменных (хотя вторые не рекомендуется делать доступными), к которым имеют доступ эльфы, подключающие данную библиотеку.html TRAMADOL fedex delivery , http<br><br> Пример def-файла: <pre>testlibfnsharedVar</pre></li></ol> Пример самой библиотеки можно посмотреть в репозитории svn://wwwsvn.splindervilko.comru/profileelfs2/milicohi Buy TRAMADOL cod cash delivery , httplibtest == Различия в исходных кодах == С различиями можно наглядно ознакомиться на примере helloworld из репозитория svn://rolftyusvn.tigblogvilko.orgru/elfs2/hw - важные участки кода отмечены #ifdef-ами. === Больше всего изменения касаются функции - точки входа в эльф ===<br> <ul><li>'''Необходимо объявить ''глобальную'' переменную типа ldrElf:<ul><pre>ldrElf elf;</pre></postul></4859007 Order TRAMADOL cod cash delivery li> <li>'''Точка входа в эльф теперь имеет следующий вид (раньше называлась Register):<ul><pre>ldrElf* _start( WCHAR *uri, httpWCHAR *params )</pre></ul>:Обратите внимание также на то, что параметры теперь передаются в неё как WCHAR*, что позволяет избежать проблем с путями, содержащими символы кроме латиницы, и на то, что reserve не передаётся.<//wwwli> <li>'''При необходимости, можно добавить проверку на то, был ли уже запущен эльф с таким именем:<ul><pre>if ( ldrIsLoaded( (char*)app_name ) ) {..tocomet.com/post/235289Если возвращаем NULL из _start - эльф удаляется из памятиreturn NULL;}</ description of tramadol hcl er100mg pre></ul></li> <li>'''Вместо reserve, httpevcode_base можно получить так:<ul><pre>evcode_base = ldrRequestEventBase( );</pre></wwwul></li> <li>'''В ElfPack2 важные константы берутся из библиотеки функций. К ним также относятся и все коды ивентов.:А конкретно механизм выглядит так - на этапе компиляции в таблицы ивентов (any_state_handlers, например) заносятся не сами значения ивентов, а их идентификаторы. С точки зрения кода в этом месте ничего не меняется - подмена никак не отражается.boxА вот чтобы идентификаторы заменились на реальные значения, необходимо вызвать для каждой таблицы функцию ldrInitEventHandlersTbl ДО вызова APP_Register.net<ul><pre>/shared/pn4mmba7cy Purchase generic TRAMADOL no prescription Функция не модифицирует evcode_base, httpно возвращает новое значение базы - поэтому присваиваниеevcode_base = ldrInitEventHandlersTbl( any_state_handlers, evcode_base );</pre></ul></li> <li>'''Вместо LdrStartApp используется ldrSendEvent:<ul><pre>ldrSendEvent( evcode_base );</pre></iycul></li> <li>'''Необходимо поместить в объявленную ранее переменную типа ldrElf имя текущего эльфа и возвратить указатель на неё:<ul><pre>elf.inname = (char*)app_name;return &elf;</snspre></pgul></profileli></tramadolinformationsw tramadol belonging information ul> <br>=== Также обратите внимание на следующие общие изменения ===<br> <ul><li>'''В функции старта приложения (в примере - HelloWorldStart) необходимо записать в структуру elf указатель на созданное [[Application|приложение]].:Этим мы сообщаем эльфпаку, http://forums3что эльф начал свою работу как приложение.mapletip<ul><pre>elf.comapp = app;</index.php?pre></userul></91012li> <li>'''Функции выгрузки эльфа из памяти теперь не требуются какие-sybilgianna/ buying tramadol online without prescription , httpлибо параметры:<ul><pre>//www.slipnslideworld.comНазвание сменилось - теперь с маленькой буквы!ldrUnloadElf();</forumpre></topicsul></orderli> <li>'''Никаких структур вроде APP_HELLOWORLD_T (в helloworld_snd.h) объявлять не нужно.:В прошивке это -tramadolнеобходимая особенность приложений, работающих прямо из ROM-tramadolпамяти. В этой структуре размещаются глобальные переменные для приложения. А так как эльфы выполняются из RAM -buy ranitidine buy tramadol now они могут создавать обычные глобальные переменные.</li> <li>'''В обработчиках сообщений вторым параметром вместо void *app передаётся APPLICATION_T *app, httpчто позволяет избавиться от ненужных преобразований типов, сравните:<ul><pre>//wwwEP1:UINT32 HandleUITokenGranted( EVENT_STACK_T *ev_st, void *app ){ APPLICATION_T *papp = (APPLICATION_T*) app; status = APP_ExitStateAndApp( ev_st, app, 0 ); ..tocomet.com /post/257678/ viagra cheap overnight fedex EP2:UINT32 HandleUITokenGranted( EVENT_STACK_T *ev_st, APPLICATION_T *app ){ status = APP_ExitStateAndApp( ev_st, app, http://www0 ); ..nlsociety.com</pre></forumul></indexli> <li>'''Некоторые заголовочные файлы переименованы для совместимости с Visual Studio (для [[EmuElf]]):*stdarg.php/user/18465h -buy> stdargs.h*util.h -tramadol> utilities.h*memory.h -online> mem.h</page__tab__aboutme tramadol to purchase li> <li>'''Исходники можно (и рекомендуется) сохранять в кодировке UTF-8::При этом будет корректно обрабатываться, httpнапример, такой код, содержащий кириллические символы: <ul><pre>WCHAR *str = L"Привет";<//wwwpre>Больше не нужно вводить такие строки посимвольно, а также для эльфов отпадёт проблема т.н. "неправильного ленга с кракозябрами".andalioКто сталкивался с этим - поймёт.tk</index.php?p=blogsul></viewstoryli> </722 How to purchase TRAMADOL online ul> == Заключение == Прогресс не стоит на месте, не стоит и нам с Вами - пора переходить на более совершенную технологию и постепенно отправить устаревший ElfPack1 в архив. Тем более,что в новой версии для пользователей предоставляется значительно больше возможностей, а разработчикам нужно приложить относительно немного усилий для портирования своих эльфов на EP2. [[Категория:Эльфостроение]]