Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2_Программирование РВ.doc
Скачиваний:
4
Добавлен:
01.04.2025
Размер:
94 Кб
Скачать
☆

Простейшая программа реального времени "Hello World"

#include <rtl.h>

#include <time.h>

#include <pthread.h>

pthread_t thread;

void * start_routine(void * arg)

{

struct sched_param p;

p . sched_priority = 1;

pthread_setschedparam (pthread_self(), SCHED_FIFO, &p);

pthread_make_periodic_np (pthread_self(),

gethrtime(), 500 000 000);

while (1)

{

pthread_wait_np ();

rtl_printf("I'm here; my arg is %x\n", (unsigned) arg);

}

return 0;

}

int init_module(void) {

return pthread_create (&thread, NULL, start_routine, 0);

}

void cleanup_module(void) {

pthread_delete_np (thread);

}

Записывайте эту программу в файл hello.c, копируйте любой файл rtl.mk из дистрибутива в ту же папку и компилируй программу вызовом команды:

make -f rtl.mk hello.o

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

Замечание. Эта программа может быть найдена в файле examples/hello.

Если на вашем компьютере загружены модули таймера (rtl_time.o) и планировщика (rtl_sched.o), то для запуска потоков вы можете использовать команду:

insmod hello.o

Вы должны увидеть вывод сообщений потока. Для остановки программы выполните команду:

rmmod hello

Использование очередей FIFO в режиме реального времени

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

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

Очереди FIFO таковы, что они могут быть прочитаны или записаны процессами Linux и потоками реального времени. Очередь FIFO является однонаправленным. Вы можете использовать пару очередей FIFO для организации обмена в двух направлениях. Для использования очередей FIFO в ядро должны быть загружены модули:

system/rtl_posixio.o и fifos/rtl_fifo.o Linux

FIFO- реального времени являются символьными устройствами (всего 150 устройств). Имена файлов устройств следующие:

/dev/rtf0, /dev/rtf1, . . . /dev/rtf63

(максимальное число устройств FIFO определяется во время компиляции системы) Количество входов в папку /dev создан во время инсталляции системы.

До использования FIFO реального времени они должны быть инициализированы.

#include <rtl_fifo.h>

int rtf_create(unsigned int fifo, int size);

int rtf_destroy(unsigned int fifo);

Функция rtf_create размещает буфер определенного размера для FIFO-очереди. Параметр fifo определяет число устройство FIFO.

Функция rtf_destroy удаляет из памяти устройство FIFO.

Замечание. Эти функции должны быть вызваны только в потоке ядра Linux (например, в функции init_module()).

После того как FIFO создана, то следующие функции могут быть использованы для доступа к ним из потоков реального времени:

open(2), read(2), write(2), close(2).

Планируется поддержка всех функций стандартного ввода/вывода stdio.

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

Процессы Linux могут использовать функций ввода/вывода Unix без ограничений.

Посмотрите примерную программу examples/measurement/rt_process.c чтобы увидеть использование FIFO реального времени.