Распечатка 7.14 Процесс LXRT |
Предыдущая Содержание Следующая |
Распечатка 7.14.
/* lxrt.c */
/* * Заголовки, которые определяют функции планирования * блокировки памяти */ #include <sys/mman.h> #include <sched.h>
/* Заголовки RTAI */ #include <rtai.h> #include <rtai_sched.h> #include "rtai_lxrt.h"
#define TICK_TIME 500000
int main(){
RT_TASK *task; RTIME period; struct sched_param sched;
/* Создаём задачу SCHED_FIFO с максимальным приоритетом */ sched.sched_priority = sched_get_priority_max(SCHED_FIFO); if (sched_setscheduler(0, SCHED_FIFO, &sched) != 0){ perror("sched_setscheduler failed\n"); exit(1); }
/* Блокируем все текущие и будущие выделения памяти */ mlockall(MCL_CURRENT | MCL_FUTURE);
/* ---- module_init ---- */
/* * rt_task_init создаёт для этой задачи представителя * реального времени ядре. Все интерфейсы RTAI будут * выполняться этим представителем под планировщиком RTAI от * имени этой задачи. Обратите внимание, что первый аргумент * имеет тип unsigned long. Строка может быть преобразована * в unsigned long с помощью функции nam2num. */ if (!(task = rt_task_init(nam2num(“hello”), 0, 0, 0))) { printf("LXRT task creation failed\n”); exit(2); }
rt_set_oneshot_mode(); period = start_rt_timer(nano2count(TICK_TIME)); /* Наконец, делаем нашу задачу периодической */ rt_task_make_periodic(task, rt_get_time() + 5*period, period);
/* --- Основная работа нашей задачи реального времени --- */
count = 100; while(count--) { rt_printk(“Hello Real-time World\n”); rt_task_wait_period(); }
/* ---- cleanup_module ---- */
stop_rt_timer(); rt_busy_sleep(10000000); rt_task_delete(task); }
|
Предыдущая Содержание Следующая |