The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

Распечатка 7.13 Задача RTAI в виде модуля ядра

Распечатка 7.13 Задача RTAI в виде модуля ядра

Предыдущая  Содержание  Следующая V*D*V

Распечатка 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();

  }

}

 

Предыдущая  Содержание  Следующая