Распечатка 7.13 Задача RTAI в виде модуля ядра |
Предыдущая Содержание Следующая |
Распечатка 7.13.
/* rtai-kernel.c */
/* Заголовочный файл модуля ядра */ #include <linux/module.h>
/* Используемые интерфейсы RTAI находятся в * этих заголовочных файлах */ #include <rtai.h> #include <rtai_sched.h>
/* Частота тиков таймера в наносекундах */ #define TIMER_TICK500000 /* 0.5 мс */
/* Структура задачи для нашей задачи реального времени */ static RT_TASK hello_task;
/* Будет вызываться при загрузке модуля */ int init_module(void) { /* ‘период’ нашей периодической задачи */ RTIME period; RTIME curr; /* текущее время */
/* * rt_task_init создаёт задачу реального времени * в состоянии ожидания */ rt_task_init(&hello_task, /* структура задачи */ hello_thread, /* функция задачи */ 0, /* аргумент для функции задачи */ 1024, /* размер стека */ 0, /* Приоритет. Наивысший приоритет –>0, Нижайший ->RT_LOWEST_PRIORITY */ 0, /* Задача не использует FPU */ 0 /* Обработчика сигналов нет */ ); /* * Следующие две функции таймера предназначены для вызова * только один раз в начале всей работы в реальном времени. * Таймер фактически запустил "системные часы реального * времени". Таймер используется планировщиком как датчик * времени. */
/* * Таймеры могут быть настроены в периодический режим или * режим однократного запуска */ rt_set_oneshot_mode();
/* * Тик таймера в наносекундах конвертируется во внутренние * единицы времени. */ period = start_rt_timer(nano2count(TICKS));
/* Получаем текущее время */ curr = rt_get_time();
/* Наконец, делаем эту задачу периодической */ rt_task_make_periodic(&hello_task, /* Указатель на структуру задачи */ curr + 5*period, /* время старта задачи */ period // период задачи ); return 0; }
void cleanup_module(void) { /* * Останавливаем таймер, ждём какое-то время и, наконец, * удаляем задачу */ stop_rt_timer(); rt_busy_sleep(10000000); rt_task_delete(&hello_task); }
/* Наш основной поток реального времени */ static void hello_thread(int dummy) { while(1){ rt_printk(“Hello Real-time world\n”); /* Ждём следующего периода */ rt_task_wait_period(); } }
|
Предыдущая Содержание Следующая |