Programy real-time pisze się jako moduły kernela, kompiluje i ładuje przy pomocy standardowych narzędzi do tego służących.
Każdy program real-time zawiera funkcje init_module()
i cleanup_module()
.
RTLinux zapewnia programiście API zgodne ze standardem POSIX. Można używać wątków w procesach jądra, podobnie jak zapewnia to biblioteka LinuxThreads w przestrzeni użytkownika.
Aby stworzyć wątek real-time wykorzystujemy funkcję pthread_create()
, zaś żeby go zakończyć pthread_cancel()
.
Przy pomocy funkcji: pthread_attr_init()
, pthread_attr_setschedparam()
i pthread_attr_getschedparam()
możemy zmienić właściwości tworzonego wątku.
Funkcje clock_gettime()
i clock_gethrtime()
zwracają aktualny czas.
Jednakże to co nas naprawdę interesuje to wywołania regulujące szeregowanie wątków.
pthread_setschedparam(pthread_t thread, int policy, const struct sched_param *param)
- ustawia właściwości istniejącego wątku,
pthread_make_periodic_np(pthread_t thread, const struct itimerspec *its)
- powoduje, że wątek będzie uruchamiany co pewien czas.
#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(), 500000000); while (1) { pthread_wait_np(); rtl_printf("Jestem programem czasu rzeczywistego\n"); } return 0; } int init_module(void) { return pthread_create (&thread, NULL, start_routine, 0); } void cleanup_module(void) { pthread_cancel (thread); pthread_join (thread, NULL); }
Ten program będzie wyświetlał dwa razy na sekundę napis "Jestem programem czesu rzeczywistego".
Przykładowe moduły pokazujące możliwości RTLinuksa znajdują się w katalogu examples/.
Poprzednia - Tworzenie programów real-time - Następna