Роб Кёртен - Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform
- Название:Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform
- Автор:
- Жанр:
- Издательство:Петрополис
- Год:2001
- Город:Санкт-Петербург
- ISBN:5-94656-025-9
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Роб Кёртен - Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform краткое содержание
Книга "Введение в QNX/Neutrino 2» откроет перед вами в мельчайших подробностях все секреты ОСРВ нового поколения от компании QNX Software Systems Ltd (QSSL) — QNX/Neutrino 2. Книга написана в непринужденной манере, легким для чтения и понимания стилем, и поможет любому, от начинающих программистов до опытных системотехников, получить необходимые начальные знания для проектирования надежных систем реального времени, от встраиваемых управляющих приложений до распределенных сетевых вычислительных систем
В книге подробно описаны основные составляющие ОС QNX/Neutrino и их взаимосвязи. В частности, уделено особое внимание следующим темам:
• обмен сообщениями: принципы функционирования и основы применения;
• процессы и потоки: базовые концепции, предостережения и рекомендации;
• таймеры: организация периодических событий в программах;
• администраторы ресурсов: все, что относится к программированию драйверов устройств;
• прерывания: рекомендации по эффективной обработке.
В книге представлено множество проверенных примеров кода, подробных разъяснений и рисунков, которые помогут вам детально вникнуть в и излагаемый материал. Примеры кода и обновления к ним также можно найти на веб-сайте автора данной книги, www.parse.com.
Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Возвращает: Код завершения, при помощи вспомогательного макроса _RESMGR_STATUS , а также (не обязательно) текущее смещение.
int io_mknod(resmgr_context_t * ctp , io_mknod_t * msg ,
RESMGR_HANDLE_T * handle , void * reserved )
Классификация: Функция установления соединения
Обработчик по умолчанию: Нет
Вспомогательные функции: iofunc_mknod()
Клиентская функция: mknod() , mkdir() , mkfifo()
Сообщения: _IO_CONNECT, подтип _IO_CONNECT_MKNOD
Структура данных:
struct _io_connect {
// Внутренние поля (как описано выше)
uint16_t path_len ;
uint8_t extra_type ;
uint16_t extra_len ;
char path [1];
};
struct _io_connect_link_reply {
uint32_t reserved1 [2];
uint8_t eflag ;
uint8_t reserved2 [3];
uint32_t umask ;
uint16_t nentries ;
uint16_t path_len ;
};
typedef union {
struct _io_connect connect ;
struct _io_connect_link_reply link_reply ;
} io_mknod_t;
Описание: Создает новую точку входа в файловую систему. Сообщение выдается для создания файла с именем, указанным в path , и типом, закодированным в поле mode (оно из «внутренних полей» структуры struct _io_connect
и здесь не показано).
Реально это используется только для клиентских функций mkfifo() и mkdir() .
Возвращает: Код завершения, при помощи вспомогательного макроса _RESMGR_STATUS .
int io_mmap(resmgr_context_t * ctp , io_mmap_t * msg ,
RESMGR_OCB_T * ocb )
Классификация: Функция ввода/вывода
Обработчик по умолчанию: iofunc_mmap_default()
Вспомогательные функции: iofunc_mmap()
Клиентская функция: mmap() , munmap() , mmap_device_io() , mmap_device_memory()
Сообщения: _IO_MMAP
Структура данных:
struct _io_mmap {
uint16_t type ;
uint16_t combine_len ;
uint32_t prot ;
uint64_t offset ;
struct _msg_info info ;
uint32_t zero [6];
};
struct _io_mmap_reply {
uint32_t zero ;
uint32_t flags ;
uint64_t offset ;
int32_t coid ;
int32_t fd ;
};
typedef union {
struct _io_mmap i ;
struct _io_mmap_reply o ;
} io_mmap_t;
Описание: Позволяет администратору процессов применять к файлам вашего администратора ресурсов операцию mmap() . В общем случае самостоятельно программировать эту функцию не следует (используйте обработчик по умолчанию, предоставляемый iofunc_func_init() ), если только вы не хотите ее преднамеренно отключить (например, драйвер последовательного порта мог бы запросто возвратить ENOSYS, поэтому для него эта операция не имеет никакого смысла).
Данную функцию администратора ресурсов может вызвать только администратор процессов
Отметим, что побочным результатом вызова этой функции администратором процессов является создание OCB (то есть будет вызвана функция iofunc_ocb_calloc() , но для правильно спроектированного администратора ресурсов это не должно иметь никаких последствий.
Возвращает: Код завершения, при помощи вспомогательного макроса _RESMGR_STATUS .
int io_mount(resmgr_context_t * ctp , io_mount_t * msg ,
RESMGR_HANDLE_T* handle , io_mount_extra_t* extra )
Данная функция зарезервирована QSSL для будущего использования. Вам следует инициализировать таблицу функций ввода/вывода, используя iofunc_func_init() , и не изменять данную точку входа.
int io_msg(resmgr_context_t * ctp , io_msg_t * msg ,
RESMGR_OCB_T * ocb )
Классификация: Функция ввода/вывода
Обработчик по умолчанию: Нет
Вспомогательные функции: Нет
Клиентская функция: Нет (создается «вручную» и передается посредством MsgSend() )
Сообщения: _IO_MSG
Структура данных:
struct _io_msg {
uint16_t type ;
uint16_t combine_len ;
uint16_t mgrid ;
uint16_t subtype ;
};
typedef union {
struct _io_msg i ;
} io_msg_t;
Описание: Интерфейс _IO_MSG является более общей, но менее переносимой вариацией на тему ioctl() и devctl() . Поле mgrid идентифицирует конкретный администратор — вы не должны выполнять никаких действий по запросам, не соответствующим идентификатору вашего администратора. Поле subtype фактически задает команду, которую клиент хочет выполнить. Любые неявно передаваемые данные следуют за входной структурой. Данные, возвращаемые клиенту, передаются сами по себе; код завершения возвращается через макрос _RESMGR_STATUS . Уникальный «идентификатор администратора» (manager ID) вы можете получить в QSSL.
Возвращает: Код завершения, при помощи вспомогательного макроса _RESMGR_STATUS .
int io_notify(resmgr_context_t * ctp , io_notify_t * msg ,
RESMGR_OCB_T * ocb )
Классификация: Функция ввода/вывода
Обработчик по умолчанию: Нет
Вспомогательные функции: iofunc_notify() , iofunc_notify_remove() , iofunc_notify_trigger()
Клиентская функция: select() , ionotify()
Сообщения: _IO_NOTIFY
Структура данных:
struct _io_notify {
uint16_t type ;
uint16_t combine_len ;
int32_t action ;
int32_t flags ;
struct sigevent event ;
};
struct _io_notify_reply {
uint32_t zero ;
uint32_t flags ;
};
typedef union {
struct _io_notify i ;
struct _io_notify_reply o ;
} io_notify_t;
Описание: Данный обработчик отвечает за установку, опрос или удаление обработчика уведомлений. Параметры action (действие) и flags (флаги) определяют тип операции уведомления и условия; параметр event (событие) является структурой типа struct sigevent
, которая определяет событие уведомления (если оно есть), которое клиент хочет получить. Событие event клиенту доставляется функцией MsgDeliverEvent() или функцией iofunc_notify_trigger() .
Возвращает: Код завершения, при помощи вспомогательного макроса _RESMGR_STATUS ; флаги возвращается ответным сообщением.
int io_open(resmgr_context_t * ctp , io_open_t * msg ,
RESMGR_HANDLE_T * handle , void * extra )
Классификация: Функция установления соединения
Обработчик по умолчанию: iofunc_open_default()
Вспомогательные функции: iofunc_open() , iofunc_ocb_attach()
Читать дальшеИнтервал:
Закладка: