Вариант 1
Обмен данными посредством COM-порта
Вариант 2
Создание графического интерфейса
Вариант 1
Обмен данными посредством COM-порта
Цель: изучение программного взаимодействия с COM-портом
в ОСРВ QNX.
Упражнения
1. Запишите iso-образ загрузочного диска ОСРВ QNX
на компакт-диск CD-R, например, с помощью программы
Small CD-Writer. Загрузите систему с этого диска.
2. Создайте из разъема DB-9S заглушку для COM-порта
позволяющую его тестировать.
3. Напишите программу на языке C++, которая инициализирует
связь с COM-портом, позволяет имитировать отправку данных
на него и получение из него данных.
Вариант 2
Создание графического интерфейса
Цель: создать графический интерфейс для изученных примеров программ.
Краткая теория
Основы создания оконного приложения
с помощью IDE App Builder
в графической оболочке Photon QNX Neutrino
1. Запустите приложение
Меню
Launch/Development/Builder
2. В приложении Builder выполните команду
File/New
В диалоговом окне
New Window Style
выберите стиль
Project App
3. Сохраните проект под именем, например, project1 в папке
/root, выполнив команду
File/Save as...
4. Проверьте с помощью Photon File Manager:
в папке
/root/project1
должны появиться следующие папки и файлы:
src
wgt
abapp.dfn
abapp.wsp
5. Выполните проверочные сборку и запуск проекта,
выполнив команду
Application/Build+Run...
При этом появится диалоговое окно, в котором
нужно сначала нажать кнопку
Generate
Появится диалоговое окно
Select New Platform
в этом окне нужно выбрать в разделе
Target Platform
пункт
ntox86/gcc
и нажать на кнопку
Generate...
После создания Makefile в окне с прогресс-баром
нажать кнопку Done.
6. Выполнение сборки проекта последует после нажатия
на кнопку
Make
Она находится правее кнопке Generate
Появиться окно
Make Application
В нем происходит процесс компиляции, по завершении которго
нужно нажать Done.
7. Выполните запуск программы, нажав на кнопку
Run
Она находится справа от кнопки Make.
8. После проверочных сборки и запуска можно закрыть
создаваемое пустое приложение и нажать кнопку Done
в окне, в котором выполнялись эти действия,
чтобы продолжить проектирование приложения
в IDE App Builder.
9. На панели Widgets выберите нужные виджеты,
например, Label и Button.
Разместите их по-одному в заготовке окна приложения.
10. Выделите виджет Label и перейдите на пенель
Resources
На этой панели замените стандартное имя идентификатора
виджета PtLabel, например на
PtLabel0
Для свойства
Label Text
задайте нужное значение, например, temp text.
11. Выделите виджет Button и перейдите на пенель
Resources
На этой панели замените стандартное имя идентификатора
виджета PtButton, например на
PtButton0
Для свойства
Button Text
задайте нужное значение, например, Start.
12. Создание обработчика щелчка по кнопке PtButton0.
Убедитесь, что в заготовке окна приложения выделен
виджет PtButton0, и перейдите на панель-вкладку
Callbacks.
Выделите на этой панели событие
Activate
После этого появится диалоговое окно
Widget: PtButton0 - [Activate Callback].
Напротив строки
Function:
введите имя функции-обработчика события, например
ptbutton0click
и нажмите внизу диалгового окна кнопку
Apply
В разделе Callbacks этого окна над строкой <NEW>
появится строка
Code: ptbutton0click
Для закрытия этого диалогового окна нужно нажать
внизу кнопку
Done
13. После этого убедитесь с помощью файлового менеджера
Photon File Manager,
что появился файл
/root/project1/src/ptbutton0click.c
Команды, записанные в этом файле будут выполнятся
при щелчке по виджету-кнопке PtButton0.
Если файла не видно, то, возможно, требуется обновить
в файловом менеджере список файлов, нажав F5.
14. Чтобы записать некторый алгоритм в привязанный
к виджету PtButton0, нужно выполнить сборку приложения,
повторив действия, описанные в пункте 5, т.е.
выполнить команду Generate... в соответсвующем окне.
15. Откройте в редакторе Edit файл
/root/project1/src/abdefine.h
В этом файле определены глобальные имена для виджетов,
размещаемых в окне создаваемого приложения.
Найдите строки, в которых определены имена
для виджетов PtLabel0 и PtButton0.
Эти имена будут использоваться в обработчиках событий
для доступа к свойствам и методам виджетов,
соответственно:
ABW_PtLabel0
ABW_PtButton0
16. В редакторе Editor откройте файл
/root/project1/src/ptbutton0click.c
и добавьте команду
PtSetResource(ABW_PtLabel0, Pt_ARG_TEXT_STRING, "Hello, World!..", 0);
Эту строку нужно добавить перед строкой
return(Pt_CONTINUE);
Сохраните файл.
17. Команда, использованная в предыдущем пункте,
PtSetResource(ABW_PtLabel0, Pt_ARG_TEXT_STRING, "Hello, World!..", 0);
позволяет менять значения определенного свойства виджета.
Здесь константа с именем
Pt_ARG_TEXT_STRING
является псевдонимом свойства Label Text для виджета PtLabel.
Подобные псевдонимы используются при программировании.
Для каждого свойства на вкладке
Resources
можно узнать псевдоним, если на вести на строку с именем
свойсва стрелку мыши и подождать некоторое время.
После имени свойства, через запятую, указывают значение
свойства, в данном случае - текстовая константа
в двойных кавычках:
"Hello, World!.."
18. Выполните компиляцию, Make, и запуск, Run, программы.
При щелчке по кнопки вместо надписи
temp text
должна появиться надпись:
"Hello, World!.."
19. После компиляции в папке
/root/project1/src/gcc_ntox86
появился исполнимый файл
project1
Его можно запустить из терминала, например, нажав Ctrl+T
в файловом менеджере и набрав команду
./project1
Альтернативный способ: набрать эту команду в диалоговом
окне
Open With
которое можно вызвать c помощью пункта Open With
из контекстного меню файла в файловом менеджере
Photon File Manager.
Упражнения
1. Выберите любые три примера программ, изученных Вами
на предыдущих лабораторных работах и создайте
для них графический интерфейс в IDE App Builder
графической оболочки Photon ОСРВ QNX Neutrino.
Пример программы N 1.
2. Пример программы N 2.
3. Пример программы N 3.
4.* Создать приложение, выводящее на экран виджет Progres
от 1 до 100000. Организовать смену приоритета приложения
с помощью виджетов Toggle Button.
5.** Создать приложение, выполняющее долговременные
вычисления, не менее 3 минут, и прерываемую событиями,
возникающими через случайные промежутки времени.
Во время приостановки программы выполнить приостановку
события: произвести небольшие по объему вычисления.
Определить время работы программы без остановок
и суммарное время обработки событий.