Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Jamaica.doc
Скачиваний:
5
Добавлен:
01.03.2025
Размер:
1.89 Mб
Скачать

1 Создание простого приложения в Eclipse

Теперь давайте научимся программировать приложения с использованием Eclipse. Создадим программу, которая будет обрабатывать POSIX сигналы SIGUSR1 и SIGUSR2. При получении сигнала SIGUSR1 программа будет выводить в консоль строку «I'm a POSIX signal handler!». При получении сигнала SIGUSR1 программа будет выводить на консоль строку «Good bye!» и завершаться с кодом возврата 0.

Для выполнения этого задания сначала создадим новый проект Java — выберем элемент меню File | New | Project. Откроется окно помощника создания проектов. Введем имя проекта (try_rtjava) и нажмем кнопку Finish (рис. 1).

Р ис.1. Создание проекта try_rtjava

Обратите внимание, что в разделе JRE с помощью выбора переключателя Use a project specific JRE можно выбрать среду исполнения Java для данного проекта из числа установленных JRE.

Итак, после нажатия кнопки Finis в представлении Package Explorer появится папка «try_rtjava» - это и есть наш проект.

Создадим новый класс (File | New | Class). В открывшемся окне (рис. 2) укажем имя класса (HelloRTJava) и в группе флажков Which method stubs would you like to create? Установим первый флажок, т. е. выберем метод «main», чтобы затем меньше текста вводить руками. Остальное оставляем как есть и нажимаем кнопку Finish.

В папке src проекту try_rtjava появится файл HelloyRTJava.java (Lab/program/HelloRTJava/). Модифицируем его так, чтобы получить такое содержимое:

import javax.realtime.AsyncEventHandler;

import javax.realtime.POSIXSignalHandler;

public class HelloRTJava {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

POSIXSignalHandler.addHandler(POSIXSignalHandler.SIGUSR1,new AsyncEventHandler(){

public void handleAsyncEvent() {

System.out.println("I'm a POSIX signal handler!");

}

});

POSIXSignalHandler.addHandler(POSIXSignalHandler.SIGUSR2,new AsyncEventHandler(){

public void handleAsyncEvent() {

System.out.println("Good bye!");

System.exit(0);

}

});

while (true) {

try {

Thread.sleep(2000);

} catch (Exception e) {

System.err.println("POSIX signal example error:" + e.getMessage());

e.printStackTrace();

}

System.out.println("Kick me with the QNX command:");

System.out.println("slay -s SIGUSR1 HelloRTJava");

System.out.println();

System.out.println("or kill me with the QNX command:");

System.out.println("slay -s SIGUSR2 HelloRTJava");

System.out.println("");

}

}

}

Рис.2. Создание класса HelloRTJava

Выделим имя проекта в представлении Package Explorer и путем выбора элемента меню Project | Build Project скомпилируем класс. В каталоге bin проекта появится файлы HelloRTJava.class.

Для запуска Java-приложения выберем элемент меню Run | Run. Класс HelloRTJava выполнится на установленной в нашей среде разработки виртуальной машине JamaicaVm — в представлении Console мы увидим периодически выводимые строки:

Kick me with the QNX command:

slay -s SIGUSR1 HelloRTJava

or kill me with the QNX command:

slay -s SIGUSR2 HelloRTJava

А теперь давайте превратим байт-код класса HelloRTJava в исполняемый файл. Для этой цели проще всего воспользоваться Eclipse-модулем Jamaica и создать для Java-проекта try-rtjava соответствующий Ant-сценарий — сценарий на языке XML, предназначенный для автоматизации сборки проектов Java на основе использования программы ant. По сути дела, назначение программы ant в Java-проектах аналогично назначению программы make в проектах C/C++. Нажмем File | New | Jamaica Buildfile (Ant Buildfile to launch jamaica tools).

Р ис. 3. Параметры Ant-сценария для создания исполняемого файла

Откроется окно New Jamaica Buildfile, в котором задаются параметры Ant-сценария. Укажем имя проекта, тип целевой системы и имя класса, содержащего статический метод main (рис.3). Сохраним параметры, нажав кнопку Finish.

Как результат, в списке слева увидите наш сценарий - «SignalHandler». Его файл (build_jamaica.xml) будет находиться в папке проекта try_rtjava. Сценарий можно запустить кнопкой Build.

Созданный Ant-сценарий можно открыть в специальном редакторе. Для этого надо дважды щелкнуть мышью на имени файла Ant-сценария в проекте try_rtjava — build_jamaica.xml. Файл откроется в редакторе, как это показано на рисунке 4(a).

На рис. 4(a) показано представление Overview редактора Ant-сценариев. Вы можете построить исполняемый файл с помощью Ant-сценария build_jamaica.xml, щелкнув на гиперссылке «invoke Ant on this target». Давайте так и сделаем — в результате в проекте появится исполняемый файл для ОСРВ QNX Neutrino — HelloRTJava.

Параметры Ant-сценария можно менять с помощью представления Options редактора Ant-сценариев (риc. 4.(b)), для перехода в эту вкладку нужно нажать на гиперссылку «show the options».

Р ис.4(а). Редактор Ant-сценария — представление Overview.

Р ис. 4(b). Редактор Ant-сценария — представление Options

Результаты выводимые в консоль при сборке исполняемого приложения:

Buildfile: /home/stolyarenko/workspace/try_rtjava/build_jamaica.xml

build_HelloRTJava:

[jamaicabuilder] Reading configuration from '/usr/local/jamaica-6.0-2/etc/jamaica.conf'...

[jamaicabuilder] Reading configuration from '/usr/local/jamaica-6.0-2/target/linux-x86/etc/jamaica.conf'...

[jamaicabuilder] Reading configuration from '/usr/local/jamaica-6.0-2/target/qnx-x86/etc/jamaica.conf'...

[jamaicabuilder] Jamaica Builder Tool 6.0 Release 2 (User: Yuriy Stolyarenko, Expires: 2013.02.08)

[jamaicabuilder] Generating code for target 'qnx-x86', optimisation 'speed'

[jamaicabuilder] + bin/PKG__V14acb94a97a93be9__.c

[jamaicabuilder] + bin/PKG_com_aicas_util_V9bc5428c708c8407__.c

[jamaicabuilder] ** warning jamaica: The dynamic library libgf.so cannot be found.

[jamaicabuilder] + bin/PKG_java_awt_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_java_awt_event_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_java_awt_font_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_java_awt_geom_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_java_io_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_java_lang_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_java_lang_ref_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_java_lang_reflect_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_java_net_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_java_nio_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_java_nio_charset_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_java_security_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_java_text_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_java_util_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_java_util_concurrent_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_java_util_concurrent_locks_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_java_util_jar_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_java_util_logging_V4b928c2a106ded30__.c

[jamaicabuilder] + bin/PKG_javax_realtime_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_sun_awt_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_sun_font_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_sun_java2d_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_sun_java2d_pipe_V920fb1f94bf9048a__.c

[jamaicabuilder] + bin/PKG_sun_misc_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_sun_net_www_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_sun_net_www_protocol_jar_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_sun_nio_cs_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_sun_reflect_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_sun_security_provider_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_sun_security_util_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_sun_text_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_sun_text_normalizer_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/PKG_sun_util_calendar_V9bc5428c708c8407__.c

[jamaicabuilder] + bin/HelloRTJava__.c

[jamaicabuilder] + bin/HelloRTJava__.h

[jamaicabuilder] Class file compaction gain: 76.3132% (14020804 ==> 3321080)

[jamaicabuilder] * C compiling 'bin/HelloRTJava__.c'

[jamaicabuilder] * C compiling 'bin/PKG__V14acb94a97a93be9__.c'

[jamaicabuilder] * C compiling 'bin/PKG_com_aicas_util_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_java_awt_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_java_awt_event_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_java_awt_font_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_java_awt_geom_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_java_io_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_java_lang_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_java_lang_ref_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_java_lang_reflect_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_java_net_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_java_nio_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_java_nio_charset_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_java_security_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_java_text_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_java_util_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_java_util_concurrent_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_java_util_concurrent_locks_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_java_util_jar_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_java_util_logging_V4b928c2a106ded30__.c'

[jamaicabuilder] * C compiling 'bin/PKG_javax_realtime_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_sun_awt_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_sun_font_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_sun_java2d_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_sun_java2d_pipe_V920fb1f94bf9048a__.c'

[jamaicabuilder] * C compiling 'bin/PKG_sun_misc_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_sun_net_www_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_sun_net_www_protocol_jar_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_sun_nio_cs_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_sun_reflect_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_sun_security_provider_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_sun_security_util_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_sun_text_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_sun_text_normalizer_V9bc5428c708c8407__.c'

[jamaicabuilder] * C compiling 'bin/PKG_sun_util_calendar_V9bc5428c708c8407__.c'

[jamaicabuilder] + bin/HelloRTJava__nc.o

[jamaicabuilder] * linking

[jamaicabuilder] * stripping

[jamaicabuilder] Application memory demand will be as follows:

[jamaicabuilder] initial max

[jamaicabuilder] Thread C stacks: 512KB (= 8* 64KB) 31MB (= 511* 64KB)

[jamaicabuilder] Thread Java stacks: 128KB (= 8* 16KB) 8176KB (= 511* 16KB)

[jamaicabuilder] Heap Size: 2048KB 256MB

[jamaicabuilder] GC data: 128KB 16MB

[jamaicabuilder] TOTAL: 2816KB 311MB

[echo]

[echo] The executable has been created successfully:

[echo] /home/stolyarenko/workspace/try_rtjava/HelloRTJava

[echo] Please transfer it to your target device manually.

[echo]

BUILD SUCCESSFUL

Total time: 1 minute 38 seconds

Теперь все подготовлено для проведения анализа и профилирование программ для ОСРВ QNX.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]