Способ динамической компоновки программы на встроенной платформе и встроенная платформа

Иллюстрации

Показать все

Изобретение относится к области динамической компоновки программы на встроенной платформе. Техническим результатом является повышение скорости динамической компоновки программы. Раскрываются способ динамической компоновки программы на встроенной платформе и встроенная платформа. Встроенная платформа содержит промежуточный уровень, содержащий по меньшей мере один класс. Компонуемая прикладная программы содержит по меньшей мере один класс. Прикладные программы компилируют в Позиционно-Независимые Коды ПНК (Р1С), причем позиции хранения различных кодовых разделов в кодах ПНК (PIC), полученных при компиляции различных функций прикладной программы, не пересекаются друг с другом; все коды ПНК (Р1С) копируют в память встроенной операционной системы; создают указатель класса и осуществляют перенос указателя класса между классом промежуточного уровня и классом прикладной программы для динамической компоновки прикладной программы. 2 н. и 7 з.п. ф-лы, 5 ил., 2 табл.

Реферат

Область изобретения

Настоящее изобретение относится к технологиям встроенных систем и, в частности, к способу динамической компоновки программы на встроенной платформе и к встроенной платформе.

Уровень техники

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

В настоящее время в продуктах со встроенной системой, таких как мобильный телефон, динамическая компоновка программы реализуется с использованием режима Формат Исполняемого и Компонуемого Модуля ФИКМ (ELF), как показано на рис.1.

На фиг.1 показана схема динамической компоновки программы с использованием режима ФИКМ (ELF) в известном техническом решении.

Как показано на фиг.1, если динамическая компоновка программы реализуется с использованием режима ФИКМ (ELF), то сначала прикладная программа компилируется в файл в формате ФИКМ (ELF), а затем для файла в формате ФИКМ (ELF) загрузочная программа ELF LOADER выполняет перемещение функций и перемещение переменных; далее файл в формате ФИКМ (ELF), для которого было выполнено перемещение, загружается во встроенную Операционную Систему ОС (OS) и, в завершение, для осуществления динамической компоновки программы встроенная операционная система компонует функции и переменные согласно позициям функций и переменных, для которых было выполнено перемещение.

Если динамическая компоновка программы реализуется с использованием режима ФИКМ (ELF), важную роль играет загрузочная программа ELF LOADER, осуществляющая настройку адресов функций и переменных в прикладной программе по адресам во встроенной операционной системе. В частности, загрузочная программа ELF LOADER извлекает доступную информацию из файла в формате ФИКМ (ELF), вычисляет адреса, используемые после перемещения для функций и переменных в файле в формате ФИКМ (ELF), и затем выполняет перемещение для функций и переменных согласно этим адресам.

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

Сущность изобретения

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

Технические решения согласно настоящему изобретению реализуются следующим образом.

Способ динамической компоновки программы на встроенной платформе включает в себя следующее: встроенная платформа содержит промежуточный уровень, промежуточный уровень содержит по меньшей мере один класс, каждый класс инкапсулируется по меньшей мере из одного интерфейса функции встроенной операционной системы и соответствует таблице виртуальных функций, элементы таблицы виртуальных функций соответствуют по меньшей мере одному интерфейсу функции встроенной операционной системы; компонуемая прикладная программа содержит по меньшей мере один класс, каждый класс инкапсулируется по меньшей мере из одного интерфейса функции прикладной программы и соответствует таблице виртуальных функций; элементы таблицы виртуальных функций соответствуют по меньшей мере одному интерфейсу функции прикладной программы; данный способ также включает в себя:

компиляцию прикладной программы в Позиционно-Независимые Коды ПНК (РIС) (причем позиции хранения различных кодовых разделов в кодах ПНК (РIС), полученных при компиляции различных функций прикладной программы, не пересекаются друг с другом); копирование всех кодов ПНК (РIС) в память встроенной операционной системы;

создание указателя класса и перенос указателя класса между классом промежуточного уровня и классом прикладной программы для динамической компоновки прикладной программы.

Встроенная платформа содержит: промежуточный уровень;

промежуточный уровень содержит по меньшей мере один класс, причем каждый класс инкапсулируется по меньшей мере из одного интерфейса функции встроенной операционной системы и соответствует таблице виртуальных функций; элементы таблицы виртуальных функций соответствуют по меньшей мере одному интерфейсу функции; и

промежуточный уровень сконфигурирован для реализации вышеуказанного способа.

Можно заметить, что промежуточный уровень инкапсулируется из встроенной операционной системы и содержит один или несколько классов. Каждый класс инкапсулируется из множества интерфейсов функций встроенной операционной системы и соответствует таблице виртуальных функций. При этом элементы таблицы виртуальных функций соответствуют множеству интерфейсов функций. Компонуемая прикладная программа содержит один или несколько классов, причем каждый класс инкапсулируется из множества интерфейсов функций прикладной программы и соответствует таблице виртуальных функций. При этом элементы таблицы виртуальных функций соответствуют множеству интерфейсов функций прикладной программы. Прикладная программа компилируется в Позиционно-Независимые Коды ПНК (РIС), причем позиции хранения различных кодовых разделов в кодах ПНК (РIС), полученных при компиляции различных функций прикладной программы, не пересекаются друг с другом, поэтому прикладная программа может работать в любой области памяти, и функции прикладной программы могут вызываться независимо. Все коды ПНК (РIС) копируются в память встроенной операционной системы; создается указатель класса, который переносится между классом промежуточного уровня и классом прикладной программы для динамической компоновки прикладной программы.

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

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

Краткое описание чертежей

На фиг.1 показана схема динамической компоновки программы с использованием режима ФИКМ (ELF) в известном техническом решении.

На фиг.2 показана схема, представляющая структуру встроенной платформы в соответствии с примером осуществления настоящего изобретения.

На фиг.3 показана схема динамической компоновки прикладной программы на встроенной платформе, показанной на фиг.2.

На фиг.4 показана схема, представляющая взаимодействие между промежуточным уровнем и прикладной программой в соответствии с примером осуществления настоящего изобретения.

На фиг.5 показана среда разработки динамической прикладной программы, где в качестве ядра используется служба Мгновенного Обмена Сообщениями МОС (IM).

Подробное раскрытие изобретения

Ниже приведено подробное описание настоящего изобретения со ссылками на прилагаемые чертежи и примеры осуществления для более полного представления цели, решений и преимуществ настоящего изобретения.

На фиг.2 показана схема, представляющая структуру встроенной платформы в соответствии с примером осуществления настоящего изобретения. Как показано на фиг.2, встроенная платформа содержит промежуточный уровень.

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

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

На фиг.3 показана схема динамической компоновки прикладной программы на встроенной платформе, показанной на фиг.2.

Как показано на фиг.3, процедура динамической компоновки прикладной программы включает: этап компиляции и генерации файла BIN, этап выгрузки и сохранения файла BIN, этап загрузки файла BIN и этап динамической компоновки прикладной программы.

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

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

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

Задача импорта функции и задача экспорта функции в основном связаны с этапом компиляции и генерации файла BIN, а также с этапом динамической компоновки программы; задача вызова подфункции и задача определения местоположения глобальной переменной в основном связаны с этапом компиляции и генерации файла BIN.

Четыре этапа, показанные на фиг.3, можно принять как некоторую определенную последовательность, тогда способ динамической компоновки программы на встроенной платформе, показанной на фиг.2, описывается согласно характеристикам встроенной операционной платформы ARM.

1) Этап компиляции и генерации файла BIN

Сначала программист создает прикладную программу в форме классов и обеспечивает то, что прикладная программа состоит из классов, причем каждый класс инкапсулируется из одного или нескольких интерфейсов функций прикладной программы и соответствует одной таблице виртуальных функций, а элементы каждой таблицы виртуальных функций соответствуют различным интерфейсам функций; это означает, что прикладная программа состоит из множества компонентов, и каждый компонент компилируется в один класс.

Затем прикладная программа компилируется в Позиционно-Независимые Коды ПНК (PIC), а коды ПНК (PIC) генерируются в форме файла BIN. Коды ПНК (PIC) относятся к кодам, которые могут использоваться в любой области памяти вне зависимости от конкретной позиции в памяти.

В частности, если прикладная программа компилируется с помощью компилятора ARM ADS1.2, то при использовании опции компиляции acps/ropi коды прикладной программы могут быть скомпилированы в коды ПНК (PIC), причем использование опции ropi означает, что позиции сгенерированных кодов, предназначенных только для чтения, являются независимыми позициями.

Поскольку прикладная программа компилируется в коды ПНК (РIС), то на этапе загрузки файла BIN этот файл может быть загружен в любую позицию в памяти встроенной платформы.

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

Применительно к задаче вызова подфункции, можно обеспечить независимую работу функций прикладной программы посредством компиляции функций прикладной программы в коды ПНК (РIС), при этом функции становятся независимыми, а соответствующие различным функциям позиции в памяти не накладываются друг на друга на этапе компиляции и генерации файла BIN, что позволяет вызывать любую из функций, не воздействуя на другие функции.

В частности, если прикладная программа компилируется с помощью компилятора ARM ADS1.2, то при использовании опции компиляции ZO функции прикладной программы компилируются в коды ПНК (PIC), которые являются независимыми и не накладываются друг на друга.

Например, предположим, что существует следующая прикладная программа:

int appMain(Ishell*ptr,void**ppobj)

{

fun1();

return 0;

}

void fun1 (void)

{

}

Предположим, что функция appMain всегда компилируется по начальному адресу 0×00000000 файла BIN, а для компиляции прикладной программы используются опции компиляции acps/ropi и ZO; результаты компиляции приведены в таблице 1.

Таблица 1
функция адрес
appMain РС+0×00
fun1 РС+0×0А

В таблице 1 PC является начальным адресом файла BIN, а 0×0А представляет адрес смещения функции fun1.

Как показано в таблице 1, после компиляции прикладной программы в коды ПНК (PIC), которые обеспечивают независимость функций и отсутствие наложений позиций хранения кодовых разделов, соответствующих различным функциям, переход между функциями является относительным переходом, и позиция после перехода определяется адресом сдвига. Следовательно, каждая функция прикладной программы может вызываться функциями в прикладной программе и функциями вне прикладной программы.

Применительно к задаче определения местоположения глобальной переменной могут использоваться два режима обработки. В одном из этих режимов обработки глобальная переменная помещается в структуру в прикладной программе и, следовательно, находящаяся в структуре глобальная переменная также компилируется в коды ПНК (PIC), когда структура компилируется в коды ПНК (PIC). В другом режиме обработки глобальная переменная компилируется в Позиционно-Независимые Данные ПНД (PID). В первом из вышеупомянутых режимов обработки на встроенную платформу обработки, показанную на фиг.2, одновременно может быть загружено множество прикладных программ; поскольку глобальная переменная хранится в структуре в прикладной программе, то для использования глобальной переменной ее необходимо получить из структуры, и поэтому выполнение рабочих операций усложняется. Во втором из вышеуказанных режимов обработки глобальная переменная компилируется в данные ПНД (PID), поэтому глобальная переменная может храниться вне структуры и, в общем случае, хранится в области оперативной памяти, следующей за областью, в которой расположены коды ПНК (PIC), что позволяет избежать междоменного доступа к данным.

Если прикладная программа компилируется с помощью компилятора ARMADS1.2, то при использовании опции компиляции acps/rWpi разделы данных прикладной программы компилируются в данные ПНД (PID). Данные ПНД (PID) относятся к обрабатываемым разделам данных, копируемым в любую область оперативной памяти. При использовании опции компиляции acps/rWpi разделы данных прикладной программы компилируются в данные ПНД (PID), сохраняемые в области памяти [R9]+OFFSET. [R9] является значением регистра R9, a OFFSET - значением адреса смещения. Для того чтобы избежать междоменного доступа к данным, значение регистра R9 может быть сконфигурировано как значение, равное начальному адресу BUFFER плюс размер файла BIN, то есть глобальная переменная будет сохраняться вслед за файлом BIN, полученным при компиляции прикладной программы.

Поскольку при компиляции глобальной переменной в данные ПНД (PID) требуется регистр R9, то при использовании последнего из вышеуказанных способов определения местоположения глобальной переменной прикладные программы можно загружать только по отдельности, то есть невозможно одновременно загрузить множество прикладных программ.

Кроме того, на этапе компиляции и генерации файла BIN необходимо скомпилировать главную функцию прикладной программы по начальному адресу файла BIN, то есть скомпилировать точку входа в прикладную программу на начальный адрес файла BIN, так чтобы обеспечить определение местоположения каждого компонента прикладной программы в процессе динамической компоновки программы. В частности, при компиляции прикладной программы точка входа в прикладную программу конфигурируется как first.

Если прикладная программа компилируется с помощью компилятора ARMADS1.2, то прикладная программа может быть скомпилирована в файл BIN с использованием режима thumb. Функциональный адрес кодов, сгенерированных с использованием режима thumb, обычно смещен на 32 бита (то есть на 4 байта) по сравнению с функциональным адресом кодов, сгенерированных с использованием режима arm. Когда встроенная операционная система впервые вызывает прикладную программу через промежуточный уровень, указатель точки входа в прикладную программу указывает на позицию начального адреса буфера, в котором находится файл BIN, со смещением на 4 байта, и начинается выполнение прикладной программы; например, если начальным адресом файла BIN является адрес 0×8000, то указатель точки входа должен указывать на адрес 0×8004.

Если прикладная программа компилируется с использованием режима thumb, то каждая команда в прикладной программе компилируется в 2 байта (при использовании режима arm в ходе компиляции прикладной программы каждая команда компилируется в 4 байта), что позволяет уменьшить размер файла BIN, повысить скорость выполнения прикладной программы и снизить потребляемую мощность.

Резюмируя вышеизложенное: на этапе компиляции и генерации файла BIN прикладная программа компилируется в файл BIN, местоположение точки входа в прикладную программу определяется как начальный адрес файла BIN; прикладная программа компилируется в коды ПНК (PIC), области памяти с кодами ПНК (PIC), полученными при компиляции различных функций прикладной программы, не накладываются друг на друга; глобальная переменная в прикладной программе компилируется в данные ПНД (PID), либо глобальная переменная сохраняется в структуре в прикладной программе.

2) Этап выгрузки и сохранения файла BIN

На этапе выгрузки и сохранения файла BIN выполняется непосредственное копирование файла BIN в файловую систему.

3) Этап загрузки файла BIN

Когда загружается файл BIN, выполняется непосредственное копирование файла BIN в память из файловой системы, при этом не требуется анализировать файл BIN или выполнять вычисления согласно информации из файла BIN.

4) Этап динамической компоновки программы

На этапе динамической компоновки программы создается действительный указатель класса и для реализации импорта и экспорта функций этот указатель класса переносится между классом промежуточного уровня и классом прикладной программы.

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

Например, промежуточный уровень содержит класс IFastString, класс IFastString содержит указатель таблицы виртуальных функций (pvt) и таблица виртуальных функций содержит три подфункции: IFastString_Realase, IFastringString_GetLength и IfastString_Find.

В таблице 2 показан схематический состав класса IFastString.

Когда прикладная программа вызывает функции класса IFastString, создается указатель класса FastString и трем элементам (IFastString_Realase, IFastringString_GetLength и IfastString_Find) в таблице виртуальных функций, соответствующей указателю класса, присваиваются действительные адреса функций. Следовательно, прикладная программа может определить местоположение трех функций (IFastString_Realase, IFastringString_GetLength и IfastString_Find) во встроенной операционной системе.

Таким образом, когда прикладная программа вызывает функции встроенной операционной системы с использованием класса управления (например, класса Shell), создаются различные указатели классов, соответствующие классам на промежуточном уровне; класс создается согласно идентификатору класса на промежуточном уровне; создаются экземпляры интерфейсов функций, соответствующих элементам таблицы виртуальных функций в классе, и с помощью созданного указателя класса прикладная программа определяет местоположение интерфейсов функций, соответствующих элементам в таблице виртуальных функций, на которую указывает указатель класса. Идентификатор класса на промежуточном уровне определяется при компиляции промежуточного уровня; когда прикладная программа вызывает класс промежуточного уровня, прикладная программа переносит в класс управления идентификатор вызываемого класса, затем класс управления создает соответствующий указатель класса согласно идентификатору класса и переносит указатель класса в прикладную программу.

Соответственно, точка входа в прикладную программу может быть представлена в следующей форме:

int appMain(Shell*ptr,void**ppobj)

{

return 0;

}

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

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

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

Резюмируя вышеизложенное: в настоящем изобретении промежуточный уровень инкапсулируется из встроенной операционной системы и прикладная программа разделяется на множество компонентов посредством классов, так чтобы реализовать взаимодействие между промежуточным уровнем и прикладной программой через компоненты (см. фиг.4).

На фиг.4 показана схема, представляющая взаимодействие между промежуточным уровнем и прикладной программой в соответствии с примером осуществления настоящего изобретения.

Как показано на фиг.4, когда прикладной программе необходимо вызвать функции встроенной операционной системы, для осуществления взаимодействия компонентов создается указатель класса, соответствующий классу промежуточного уровня; когда необходимо вызвать прикладную программу, промежуточный уровень вызывает прикладную программу через сохраненный указатель класса прикладной программы, причем указатель класса прикладной программы самостоятельно создается прикладной программой и сохраняется на промежуточном уровне.

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

На фиг.5 показана среда разработки динамической прикладной программы радиосистемы, где в качестве ядра используется служба Мгновенного Обмена Сообщениями МОС (IM).

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

Как показано на фиг.5, динамическая прикладная программа содержит компонент А для реализации основной функции МОС (IM), компонент В для реализации игры МОС (IM), компонент С для реализации предпочтительной функции МОС (IM), компонент D для реализации видеофункции МОС (IM), компонент Е для реализации музыкальной функции МОС (IM), компоненты F и G для реализации расширенного приложения. Компонент А, компонент F и компонент G взаимодействуют с промежуточным уровнем посредством классов, компоненты В-Е загружаются и работают после загрузки компонента А (это означает, что одновременно работают несколько компонентов); для реализации процедуры вставки прикладной программы компоненты В-Е могут взаимодействовать с классами компонента А посредством классов компонентов В-Е.

Как показано на фиг.5, SDK и встроенная операционная система компилируются и загружаются в микросхему одновременно. Динамически компонуемая прикладная программа создается в форме классов для реализации определенных прикладных функций, отдельно компилируется с использованием способа, показанного на фиг.3, затем выгружается в файловую систему микросхемы и, когда потребуется загрузка, копируется в память встроенной операционной системы; SDK и прикладная программа взаимодействуют друг с другом посредством класса.

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

Кроме того, пространство памяти, которое занимает файл BIN, полученный при компиляции прикладной программы, составляет одну треть от пространства памяти, занимаемого файлом в формате ФИКМ (ELF), полученным при компиляции прикладной программы; следовательно, если прикладная программа компилируется в файл BIN, обеспечивается экономия пространства памяти.

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

Вышеизложенное является только предпочтительными вариантами осуществления настоящего изобретения и не должно использоваться для ограничения объема патентной защиты настоящего изобретения. Все модификации, эквивалентные замены и усовершенствования, не выходящие за рамки настоящего изобретения, должны входить в объем патентной защиты настоящего изобретения.

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

2. Способ по п.1, в котором прикладная программа содержит глобальную переменную, данный способ дополнительно включает в себя:компиляцию глобальной переменной прикладной программы в Позиционно-Независимые Данные (ПНД (PID)) и сохранение данных ПНД (PID) после кодов ПИК (PIC) для реализации перемещения глобальной переменной при выполнении процедуры динамической компоновки прикладной программы.

3. Способ по п.1, в котором прикладная программа содержит глобальную переменную и структуру, данный способ дополнительно включает в себя:сохранение глобальной переменной прикладной программы в структуре в прикладной программе;компиляцию прикладной программы в Позиционно-Независимые Коды (ПНК (PIC)), включая: компиляцию структуры в коды ПНК (PIC).

4. Способ по п.1, в котором компиляция прикладной программы в коды ПНК (PIC), причем позиции хранения различных кодовых разделов в кодах ПНК (PIC), полученных при компиляции различных функций прикладной программы, не пересекаются друг с другом, включает в себя:компиляцию прикладной программы с использованием опции компиляции ACPS/ROPI и опции компиляции ZO в компиляторе ARMADS1.2 встроенной операционной системы.

5. Способ по п.2, в котором компиляция глобальной переменной прикладной программы в данные ПНД (PID) включает в себя:компиляцию прикладной программы с использованием опции компиляции ACPS/RWPI в компиляторе ARMADS1.2 встроенной операционной системы.

6. Способ по п.1, в котором создание указателя класса и перенос указателя класса между классом промежуточного уровня и классом прикладной программы включает в себя:создание прикладной программой указателя класса промежуточного уровня посредством класса управления при вызове функции встроенной операционной системы, причем указатель класса соответствует классу промежуточного уровня; перенос указателя класса в класс прикладной программы; илисоздание прикладной программой указателя класса прикладной программы, создание экземпляров элементов таблицы виртуальных функций, соответствующей классу прикладной программы, а также перенос указателя класса для сохранения на промежуточный уровень; и, когда необходимо вызвать функцию прикладной программы, вызов промежуточным уровнем указателя класса прикладной программы, сохраненного на промежуточном уровне.

7. Способ по п.1, в котором коды ПНК (PIC) являются двоичным файлом BIN.

8. Способ по п.7, в котором компиляция включает в себя:компиляцию прикладной программы с использованием режима thumb;создание указателя класса и перенос указателя класса между классом промежуточного уровня и классом прикладной программы для динамической компоновки прикладной программы, включая следующее:когда встроенная операционная система впервые вызывает прикладную программу через промежуточный уровень, создается указатель точки входа в прикладную программу, указывающий на позицию, полученную смещением на 4 байта от начального адреса буфера, в котором находится файл BIN прикладной программы, и применяется точка входа.

9. Встроенная платформа, содержащая промежуточный уровень, в которой промежуточный уровень содержит по меньшей мере один класс, причем каждый класс инкапсулирован по меньшей мере из одного интерфейса функции встроенной операционной системы и соответствует таблице виртуальных функций; а элеме