Простейшая программа реального времени "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 реального времени.
