Открыть главное меню

Изменения

Application

91 байт добавлено, 19:58, 16 февраля 2010
Нет описания правки
Application - приложение для системы [[AFW]]. Приложение это именно то, что взаимодействует с пользователем (драйвера, в отличие от приложений, обычно не взаимодействуют с пользователем, они работают с железом и приложениями или [[OS|операционной системой]]).
Приложение для AFW разрабатывалось таким, чтобы работать из [[ROM]]'а, поэтому приложение может вообще не иметь глобальных переменных, все данные приложения должны храниться в структуре приложения, в которой первой должна быть структура [[APPLICATION_T]], указатель . Указатель на экземпляр текущего приложения передаётся в каждом обработчике событий, из которых по сути и состоит приложение. В приложениях из эльфов немного иначе, как минимум таблица ивентов регистрации должна быть в [[RAM]]'е, т.к. база ивентов выделяется динамически. В прошивке коды ивентов назначаются автоматически в процессе компиляции.
== Таблица [[Event|ивентов]] регистрации ==
Массив кодов ивентов на которые стартует приложение. На эти ивенты , регистрируется функция старта приложения. Для эльфов это обычно один единственный ивент код которого записывается в глобальной структуре [[ldrElf]].
== Регистрация ==
Приложение должно быть зарегестрировано в системе [[AFW]], делается это функцией [[APP_Register]]. Её параметры:
* таблица <sub> APP_Register( reg_tbl, // указатель на первый элемент таблицы ивентов регистрации.* reg_count, // количество элементов в этой таблице ивентов.* state_handling_table, // таблица, описывающая стэйты все состояния приложения.* APP_STATE_MAX, // количество элементов в этой таблице, описывающей стэйты.(void * адресс функции ) AppStart ); // функция старта приложения.</sub>
Регистрируется приложение один раз и удалить регистрацию потом будет невозможно, а эльф обычно должен выгружаться из памяти, поэтому нужно исключить совпадение ивентов для выгружаемого эльфа, для этого используется функция [[ldrRequestEventBase]], которая каждый раз возвращает уникальный свободный код ивента который можно использовать как "свои" ивенты. Даже более, следующие 63 кода тоже свободны и никогда не встретятся. При регистрации система запоминает не ивенты, а адресс таблицы, а т.к. память эльфа может быть освобождена данные могут быть изменениы и это может быть источником глюков, от этого никуда не деться.
== Состояния Таблица состояний ({{lang-en|states}}) ==
В один момент времени приложение в целом может находиться в одном из состояний, за исключением зарезервированного ANY под индексом 0. От стэйта зависит поведение приложения. Когда на стандартный обработчик событий приложением (задается первым параметром в [[APP_InitAppData]] при старте приложения) поступает ивент он ищет код этого ивента в таблице обработчиков ивентов, которая записана под ANY стэйтом, если там не находит, то ищет в таблице под текущим стэйтом и вызывает обработчик события. Если обработчик ивента вернул чтото отличное от RESULT_OK вызывается функция выхода из приложения.
Одно состояние должно иметь:
84
правки