Теми рефератів
> Реферати > Курсові роботи > Звіти з практики > Курсові проекти > Питання та відповіді > Ессе > Доклади > Учбові матеріали > Контрольні роботи > Методички > Лекції > Твори > Підручники > Статті Контакти
Реферати, твори, дипломи, практика » Курсовые проекты » Програмування додатки

Реферат Програмування додатки





я того що б переривання займали мало часу, як це можливо. Для процесорів нормальним зазвичай буде ISR виконуються в менш 40 мкс (дані з 1995). Очевидно, що 100-МГц Pentium і 4 МГц +8051 мають дуже різні часові масштаби, але концепція все та ж вийти швидко!



Список літератури


1.https: //ru.wikipedia/wiki/Прериваніе

2. # justify gt; Додаток


Драйвер клавіатури на базі архітектури Intel®

Рішення, яке я знайшов в тому, щоб написати щось для переривання клавіатури і відключити регулярне обробник переривання клавіатури в першу чергу. Так воно визначається як статичний символ у вихідних файлів ядра (зокрема драйвера// keyboard.c), немає ніякого способу, щоб відновити його. Перед insmod'ing цей код, виконайте на іншому терміналі sleep 120; reboot, якщо ви цінуєте вашу файлову систему.

Цей код пов'язує себе IRQ 1, який є IRQ клавіатури контрольованого відповідно до архітектури Intel. Потім, коли він отримує переривання клавіатури, він читає стан клавіатури (це мета inb (0x64)) і скан-коду, який повертає значення з клавіатури. Потім, як тільки ядро ??думає, що це можливо, він виконує got_char який дає код ключа, використовуваного (перші сім біт скан-коду) і була натиснута кнопка на клавіатурі його (якщо 8-й біт дорівнює нулю) абовідпуску (тоді це один).


Приклад 4.1. intrpt.c


/*

* Intrpt.c - обробник переривання.

*

* Copyright (C) 2001 Пітер Джей Зальцман

*/


/*

* Необхідні заголовні файли

*/


/*

* Стандартний модулів ядра

*/

# include lt; Linux/kernel.h gt;/* Ми робимо ядра працює */

# include lt; Linux/module.h gt;/* Зокрема, модуль */

# include lt; Linux/sched.h gt;

# include lt; Linux/workqueue.h gt;

# include lt; Linux/interrupt.h gt;/* Ми хочемо переривання */

# include lt; ASM/io.h gt;


# define MY_WORK_QUEUE_NAME «WQsched.c»

struct workqueue_struct * my_workqueue;


/*

* Це буде викликаний ядром, як тільки це безпечно

* Зробити все нормально, дозволений модулів ядра.

*/void got_char (void * scancode)

{(KERN_INFO «скан-код% X% С. п»,

(INT) * ((Char *) scancode) amp; 0x7F,

* ((Char *) scancode) amp; 0x80? «Відпущено»: «Натиснуто»);

}


/*

* Ця функція ослужівает клавіатуру у перериванні. Він читає актуальні

* Інформація від клавіатури, а потім ставить не критичні за часом

* Частина в черзі. Це буде працювати, коли ядро ??вважатиме це можливим.

*/_t irq_handler (INT IRQ, void * dev_id, struct pt_regs * regs)

{

/*

* Ці змінні є статичними, так як вони повинні бути

* Доступні (через покажчики) на нижній половині дня.

*/INT initialised=0; unsigned char scancode; struct work_struct task;

unsigned char status;


/*

* Читання стану клавіатури

* /=inb (0x64);=inb (0x60);

(initialised == 0) {_WORK ( amp; task got_char, amp; scancode);=1;

} else {_WORK ( amp; task got_char, amp; scancode);

}

_ work (my_workqueue, amp; task);


return IRQ_HANDLED;

}


/*

* Ініціалізація модуля - зареєструвати обробник переривань

*/init_module ()

{_ workqueue=create_workqueue (MY_WORK_QUEUE_NAME);


/*

* З обробник клавіатура залишиться буде співіснувати з іншим обробником,

* Як США, ми повинні відключити його (звільнити IRQ) перш, ніж ми робимо

* Що-небудь. Так як ми не знаємо, де він знаходиться, немає ніякого способу, щоб

* Можливості пров?? встановити його - тому комп'ютер доведеться перезавантажити

Назад | сторінка 7 з 8 | Наступна сторінка





Схожі реферати:

  • Реферат на тему: Розробка програми-драйвера клавіатури
  • Реферат на тему: Сортування вводяться з клавіатури слів
  • Реферат на тему: Переклад тексту в іншу розкладку клавіатури
  • Реферат на тему: Розробка контролера матричної клавіатури на мікроконтролері К1816ВЕ48
  • Реферат на тему: Резидентний оброблювач клавіатури (перехоплення натискань клавіш і запис у ...