Распечатка 7.4 Эффективная блокировка — 1 |
Предыдущая Содержание Следующая |
Распечатка 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; }
|
Предыдущая Содержание Следующая |