Распечатка 7.4 Эффективная блокировка — 1

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

Распечатка 7.4.

 

/* hello_world.c */

 

#include <stdio.h>

/* Функция, не работающая в реальном времени */

void hello_world(void) {

  printf("hello world");

  return;

}

 

/* hello_rt_world.c */

 

#include <stdio.h>

/* Это функция реального времени */

void hello_rt_world(void){

  extern char rt_data[],rt_bss[];

  /* работаем с rt_data */

  printf("%s", rt_data);

  /* работаем с rt_bss */

  memset(rt_bss, 0xff, sizeof(rt_bss));

  return ;

}

 

 

/* hello_rt_data.c */

 

/* Данные реального времени */

char rt_data[] = "Hello Real-time World";

 

 

/* hello_rt_bss.c */

 

/* bss реального времени */

char rt_bss[100];

 

 

/* hello_main.c */

 

#include <stdio.h>

extern void hello_world(void);

extern void hello_rt_world(void);

 

/*

 * Мы определяем эти символы в скрипте компоновщика.

 * Это станет понятно дальше.

 */

extern unsigned long __start_rt_text, __end_rt_text;

extern unsigned long __start_rt_data, __end_rt_data;

extern unsigned long __start_rt_bss, __end_rt_bss;

 

/*

 * Эта функция блокирует в памяти все функции и данные

 * реального времени.

 */

void rt_lockall(void){

  /* блокировка сегмента текста реального времени */

  mlock(&__start_rt_text, &__end_rt_text - &__start_rt_text);

  /* блокировка данных реального времени */

  mlock(&__start_rt_data, &__end_rt_data - &__start_rt_data);

  /* блокировка bss реального времени */

  mlock(&__start_rt_bss, &__end_rt_bss - &__start_rt_bss);

}

 

int main(){

  /* Первым шагом является выполнение блокировки памяти */

  rt_lockall();

  hello_world();

  /* Это наша функция реального времени */

  hello_rt_world();

  return 0;

}

 

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