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.14 Процесс LXRT

Распечатка 7.14 Процесс LXRT

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

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

}

 

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