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

}

 

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