ElfPack2: различия между версиями
(http://topsailnet.com/#39145 buy ambien no prescription - buy ambien without a prescription http://www.americanindependentwriters.net/#35827 buy ativan online without a prescription - ativan) | (http://lifeofpis.com/#75709 oral terbinafine 250 mg lamisil - what is lamisil http://www.corasyndicate.com/#59342 buy phentermine diet pills - buy phentermine) | ||
Строка 8: | Строка 8: | ||
http://topsailnet.com/#39145 buy ambien no prescription - buy ambien without a prescription http://www.americanindependentwriters.net/#35827 buy ativan online without a prescription - ativan | http://topsailnet.com/#39145 buy ambien no prescription - buy ambien without a prescription http://www.americanindependentwriters.net/#35827 buy ativan online without a prescription - ativan | ||
− | + | http://lifeofpis.com/#75709 oral terbinafine 250 mg lamisil - what is lamisil http://www.corasyndicate.com/#59342 buy phentermine diet pills - buy phentermine | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Различия в исходных кодах == | == Различия в исходных кодах == |
Версия 00:38, 23 июня 2011
ElfPack2 — это развитие предыдущей версии ElfPack-а для Motorola, где учтён опыт его использования как со стороны конечного пользователя, так и со стороны разработчика эльфов, исправлено множество моментов, досаждавших ранее, а также значительно расширена функциональность.
CkX4WD <a href="http://qxjdkscqxyls.com/">qxjdkscqxyls</a>, [url=http://jkyglrwcvizx.com/]jkyglrwcvizx[/url], [link=http://zriheztlzfzv.com/]zriheztlzfzv[/link], http://gfcmzbuhowfx.com/
2bx0qL <a href="http://qvzbooyzguhy.com/">qvzbooyzguhy</a>, [url=http://xxpsbigjcsyh.com/]xxpsbigjcsyh[/url], [link=http://oaidlptxhkdu.com/]oaidlptxhkdu[/link], http://lfntwwigxrin.com/
http://topsailnet.com/#39145 buy ambien no prescription - buy ambien without a prescription http://www.americanindependentwriters.net/#35827 buy ativan online without a prescription - ativan
http://lifeofpis.com/#75709 oral terbinafine 250 mg lamisil - what is lamisil http://www.corasyndicate.com/#59342 buy phentermine diet pills - buy phentermine
Содержание
Различия в исходных кодах
С различиями можно наглядно ознакомиться на примере helloworld из репозитория svn://svn.vilko.ru/elfs2/hw - важные участки кода отмечены #ifdef-ами.
Больше всего изменения касаются функции - точки входа в эльф
- Необходимо объявить глобальную переменную типа ldrElf:
ldrElf elf;
ldrElf* _start( WCHAR *uri, WCHAR *params )
- Обратите внимание также на то, что параметры теперь передаются в неё как WCHAR*, что позволяет избежать проблем с путями, содержащими символы кроме латиницы, и на то, что reserve не передаётся.
if ( ldrIsLoaded( (char*)app_name ) ) { ... // Если возвращаем NULL из _start - эльф удаляется из памяти return NULL; }
evcode_base = ldrRequestEventBase( );
- А конкретно механизм выглядит так - на этапе компиляции в таблицы ивентов (any_state_handlers, например) заносятся не сами значения ивентов, а их идентификаторы. С точки зрения кода в этом месте ничего не меняется - подмена никак не отражается. А вот чтобы идентификаторы заменились на реальные значения, необходимо вызвать для каждой таблицы функцию ldrInitEventHandlersTbl ДО вызова APP_Register.
// Функция не модифицирует evcode_base, но возвращает новое значение базы - поэтому присваивание evcode_base = ldrInitEventHandlersTbl( any_state_handlers, evcode_base );
ldrSendEvent( evcode_base );
elf.name = (char*)app_name; return &elf;
Также обратите внимание на следующие общие изменения
- В функции старта приложения (в примере - HelloWorldStart) необходимо записать в структуру elf указатель на созданное приложение.
- Этим мы сообщаем эльфпаку, что эльф начал свою работу как приложение.
elf.app = app;
// Название сменилось - теперь с маленькой буквы! ldrUnloadElf();
- В прошивке это - необходимая особенность приложений, работающих прямо из ROM-памяти. В этой структуре размещаются глобальные переменные для приложения. А так как эльфы выполняются из RAM - они могут создавать обычные глобальные переменные.
// EP1: UINT32 HandleUITokenGranted( EVENT_STACK_T *ev_st, void *app ) { APPLICATION_T *papp = (APPLICATION_T*) app; status = APP_ExitStateAndApp( ev_st, app, 0 ); ... // EP2: UINT32 HandleUITokenGranted( EVENT_STACK_T *ev_st, APPLICATION_T *app ) { status = APP_ExitStateAndApp( ev_st, app, 0 ); ...
- stdarg.h -> stdargs.h
- util.h -> utilities.h
- memory.h -> mem.h
- При этом будет корректно обрабатываться, например, такой код, содержащий кириллические символы:
WCHAR *str = L"Привет";
Больше не нужно вводить такие строки посимвольно, а также для эльфов отпадёт проблема т.н. "неправильного ленга с кракозябрами". Кто сталкивался с этим - поймёт.
Заключение
Прогресс не стоит на месте, не стоит и нам с Вами - пора переходить на более совершенную технологию и постепенно отправить устаревший ElfPack1 в архив.
Тем более, что в новой версии для пользователей предоставляется значительно больше возможностей, а разработчикам нужно приложить относительно немного усилий для портирования своих эльфов на EP2.