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.6 Эффективная блокировка — 2

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

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

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

 

/* hello.c */

 

#include <stdio.h>

 

/*

 * Определяем макросы для использования раздела атрибутов GCC.

 * Для хранения нашего кода, данных и bss реального времени мы

 * определяем 3 раздела, real_text, read_data и real_bss

 */

#define __rt_text __attribute__ ((__section__ ("real_text")))

#define __rt_data __attribute__ ((__section__ ("real_data")))

#define __rt_bss __attribute__ ((__section__ ("real_bss")))

 

/*

 * Компоновщик очень легко поддаётся доработке. Он обычно

 * определяет символы, содержащие начальные и конечные адреса

 * разделов. Компоновщик определяет следующие символы

 */

extern unsigned long __start_real_text, __stop_real_text;

extern unsigned long __start_real_data, __stop_real_data;

extern unsigned long __start_real_bss, __stop_real_bss;

 

/* Инициализированные данные для раздела real_bss */

char rt_bss[100] __rt_bss;

 

/* Неинициализированные данные для раздела real_data */

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

 

/* Функция, которая пойдёт в раздел real_text */

void __rt_text hello_rt_world(void){

  printf("%s", rt_data);

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

  return ;

}

 

/* Наконец, блокируем в памяти наши разделы

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

 */

void rt_lockall(void){

  mlock(&__start_real_text,

        &__stop_real_text – &__start_real_text);

  mlock(&__start_real_data,

        &__stop_real_data - &__start_real_data);

  mlock(&__start_real_bss,

        &__stop_real_bss - &__start_real_bss);

}

 

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

void hello_world(void) {

  printf("hello world");

  return;

}

 

int main(){

  rt_lockall();

  hello_world();

  hello_rt_world();

  return 0;

}

 

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