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