Программирование приложения

 

Введение

программирование управление вычислительный интеллектуальный

Любое встроенное приложение (от холодильников до приборов в тепловозе) обычно включает в себя ряд функций. Даже простое приложение контроля температуры, например, включает в себя ряд задач, таких как чтение пользовательского ввода, вывода данных на дисплее, чтение выходных данных датчика температуры, и контроль на выходе вентилятора / нагревателя. Пропускная способность контроллера должна быть разделена между всеми этими задачами таким образом, что, для конечного пользователя, функции, как представляется, быть выполнены параллельно. Проектирование этого принимается решение фоновый процесс-то есть, основной процесс для контроллера - и прерывания контроллер через регулярные промежутки времени для всех других задач. Обратите внимание, что там может быть асинхронные прерывания, которые, например, могут произойти в любой произвольный момент: сигнал от таймера, сетевой карты или дискового накопителя, нажатие клавиш клавиатуры, движение мыши. Факт возникновения в системе такого прерывания трактуется как запрос на прерывание (англ. Interrupt request, IRQ). Правильное обращение прерывания, таким образом, становится важнейшей задачей.

Задачей данной курсовой работы является ознакомление с методами управления вводом / выводом в вычислительных системах а так же проектирование, и реализация интелектуальной системы с применением ввода-вывода управляемого прерываниями. Язык реализации С.


программирование управление вычислительный интеллектуальный


1. Программно-управляемый ввод / вывод


Одним из распространенных видов управления ввода / вывода это программно-управляемый ввод / вывод, (часто называемый опросный В/В (от англ. poll - досл. голосовать, понятие в программировании заключаемое в периодической проверке по определенному интервалу времени о совершения какого-либо события и в соответствии выполнения процедуры обработки этого события)). Здесь все выполняется под контролем процедуры обработчика В/В и вход или выход инициируется этой процедурой.

Порядок обращения будет требовать информацию о статусе (синхронизация информации) от устройства (например, является ли устройство готово к приему данных). Эта информация, как правило, получают с помощью второго входного сигнала от устройства; один бит, как правило, достаточно, так что один входной `` порт '' может быть использован для сбора статуса или согласования информации от нескольких устройств ввода / вывода. (Порт имя, данное подключение к устройству; например, в ячейку памяти, в которую устройство ввода / вывода отображается). порт, как правило, реализуется в виде регистра (возможно набора из D тригеров), который также выступает в качестве буфера между процессором и реальному устройству ввода / вывода. Слово порт часто используется для обозначения самого буфера.

Как правило, там будет несколько устройств, связанные с процессором; процессор периодически проверяет `входной порт` статус, под управлением программы в соответствии с процедурой обработки ввода / вывода. Если устройство ввода / вывода требует обслуживания, это будет означать эту потребность путем изменения его вклад в `состояния '' порта`. Когда программа управления определяет, что это произошло (с чтения статуса порта), то соответствующая операция будет выполнена на устройства ввода / вывода, которые запрашиваемой услугой. Типичная конфигурация может выглядеть несколько, как показано на рисунке. Выходы, обозначенные `` рукопожатие в '' будут подключены к битов в `состояния` '' порта. Вход, обозначенный `` рукопожатие в «, как правило, быть получены путем соответствующей логикой декодирования, когда порт, соответствующий устройства был адресован.


Программно-управляемый ввод / вывод


Ввод/вывод управляемый программно имеет ряд преимуществ:

Все управления находится непосредственно под управлением программы, так что изменения могут быть легко реализованы.

Порядок, в котором устройства обслуживаются определяется программой, этот порядок не обязательно фиксированной, но могут быть изменены с помощью программы, в случае необходимости. Это означает, что приоритет `` '' устройства могут быть изменены в соответствии с программным управлением. (`` Приоритет '' из определяет, какие из множества устройств, которые одновременно готовы к обслуживающей прерывание службе на самом деле будет обслуживаемых первым).

Позволяет сравнительно легко добавлять или удалять устройства.

Возможно, главный недостаток программно-управляемом вводе / выводе это то, что много времени может быть потрачено на тестирования входов состояний устройств ввода / вывода, когда устройства не нуждаются в обслуживании. Это явление называется `` занятое ожидание '' или `` цикл ожидания «, в течение которого устройства ввода / вывода «опрашиваются» но не на операции ввода / вывода выполняющиеся не очень много времени тем самым происходит простой впустую процессором, когда есть другая работа, которая может быть выполнена за это время. Кроме того, если конкретное устройство имеет свои данные, доступные только в течение короткого времени, данные могут быть пропущены, потому что вход не был протестирован в соответствующее время, что может привести к трудно улавливаемым ошибкам и неопределенным поведениям системы.

Программно управляемый ввод / вывод часто используется для простых операций, которые должны быть выполнены последовательно.

Например, следующее может быть использовано в устройстве для регулирования температуры в помещении:


while (1) { // Бесконечный циклt = get_room_temperature();tu = get_user_temperature();

if (t > tu) // температура комнаты превышает заданную

set_heat_off(); // отключить_heat_on(); // включить отопление

sleep (SLEEP_TIMER); // ожидание-простой системы на опр. время

}


2. Ввод/вывод управляемый прерыванием


Ввод/вывод управляемый прерыванием уменьшает выраженность двух проблем, упомянутых в программно-управляемом вводе / выводе, позволяя устройству, начать процедуру обслуживания устройства в процессоре. Это достигается за счет того что, устройство ввода / вывода генерирует сигнал прерывания, который идет непосредственно в аппаратном обеспечении процессора. Когда прерывание на вход процессора оказывается активным, сам процессор инициирует вызов подпрограммы в где-то в памяти процессора; частности адрес, по которому процессор ветви на прерывание зависит от прерываний средствами, имеющимися в процессоре.

Самый простой тип установки прерываний, где процессор выполняет подпрограмму ветвь в некоторой определенному адресу, когда входное прерывание, обнаруженного процессора. Обратный адрес (местоположение следующей команды в программе, которая была прервана) сохраняется процессором, как часть процесса прерывания.

Если есть несколько устройств, которые способны прерывать процессор, то с этим простой схеме прерывания программа обработки прерывания должна изучить каждое устройство, чтобы определить, какой из них вызвал прерывание. Кроме того, так как только одно прерывание может быть обработано в то время, как правило, имеется аппаратная `` приоритетный кодер «, который позволяет устройству с наивысшим приоритетом, чтобы прервать процессор, если несколько устройств пытаются прервать процессор одновременно. На рисунке 4.8, `` рукопожатие из '' выходы будут подключены к приоритетным кодером для реализации этого типа I / O. другие соединения остаются одинаковыми. (Некоторые системы используют «систему приоритетов определить, какие из прерывающих устройств обслуживается первым.` `По цепочке` `по цепочке» приоритет разрешение Рассматриваются: позже).

В большинстве современных процессоров, прерывания возврата точки сохраняются на `` стек '' в памяти, таким же образом, как адреса возврата для вызовов подпрограмм будут сохранены. В самом деле, прерывание, часто можно рассматривать как подпрограмма, которая вызывается с помощью внешнего устройства. Если стек используется для сохранения адреса возврата для прерывания, то тогда можно позволить один прервать обработку прерываний, другого прерывания. В современных компьютерных системах, часто несколько `` уровней приоритета '' прерываний, каждый из которых может быть отключен, или `` маскирован. '' Существует правило, один тип ввода прерывания, которые не могут быть отключены (немаскируемое прерывание), который имеет приоритет над всеми другими прерываний. Это прерывание вход используется для предупреждения процессор потенциально катастрофических событий, таких как неизбежный отказ питания, чтобы процессор закрыть упорядоченным образом и сохранить как можно больше информации, как это возможно.

Большинство современных компьютеров используют `` вектор прерываний. '' В вектореном прерывании, ответственность лежит на прерывающем устройстве предоставлять адрес в основной памяти к обслуживающей прерывание службе для этого устройства. Это означает, что конечно, что само устройство должны иметь достаточную `` информацию «, чтобы обеспечить этот адрес при запросе процессора, а также быть изначально запрограммированы' с этой информацией обращаться к процессору. Хотя несколько более сложным, чем простой системы прерываний, описанной ранее, векторные прерываний предоставляют такую значительное преимущество в скорости обработки прерываний и простоты реализации (т.е. отдельные процедура для каждого устройства), что этот метод почти повсеместно используются в современных компьютерных системах.

Некоторые процессоры имеют ряд специальных входов для векторных прерываний (каждая из которых действует так же, как простые прерывания были описаны выше). Другие требуют, чтобы прерывания само устройство обеспечивает адрес прерывания как часть процесса прерывания процессора.



Временная диаграмма прерываний процессора при вводе-выводе.


Примерный код где применяется техника ввода-вывода управляемой прерыванием с использование аппаратного обеспечения и среды разработки конструктора Arduino:


int pin = 13;int state = LOW;setup()

{

pinMode (pin, OUTPUT);

attachInterrupt (0, blink, CHANGE);

}

loop()

{

digitalWrite (pin, state);

}

blink()

{

state =! state;

}


В приведенном примере мы настраиваем 13 порт на запись под переменную «ПИН» в то время как процедура обработчик прерывания под событие CHANGE на функцию «БЛИНК» (мигать) которая в свою чередует состояние диода, тем самым мы видим мигание, которое инициируется и поддерживается в циклической «бесконечной» функции LOOP которая посылает на порт «ПИН» значение состояние которое изначально задано, тем самым триггер при изменении сигнала на порт с диодом вызывает прерывание на обработчик BLINK который вновь инвертирует значение состояния, тем самым замыкая цикл.

Прерывания могут быть использованы для получения сигналов автоматически в программах микроконтроллерах, и может помочь решить проблемы синхронизации. Хорошие задачи для использования прерывание может включать в себя чтение энкодер, или контроль пользовательского ввода.

Если вы хотите, убедиться, что программа всегда улавливает импульсы от датчика вращения, так что она никогда не пропускает импульс, было бы очень сложно написать программу, чтобы сделать что-нибудь еще, потому что программа будет необходимо постоянно опрашивать датчик линии для датчика, для того, чтобы поймать импульсы, когда они произошли. Другие датчики имеют похожий интерфейс динамического характера такие, как чтение ультразвукового датчика, который пытается поймать какой-то объект, или инфракрасный датчик слот (фото-прерыватель), пытаясь поймать падение монеты. Во всех этих случаях, используя прерывание может освободить микроконтроллер, чтобы получить время для другой работы и в то же время никак не теряя данных на входе.

Аппаратные прерывания используется для связи устройств, которые требуют внимания от операционной системы. Некоторые общие примеры сигнализации жесткий диск, который прочитал серию блоков данных, или что сетевое устройство обработала буфер, содержащий сетевые пакеты. Прерывания также используется для асинхронных событий, таких как появлением новых данных из внешней сети. Аппаратные прерывания доставляются непосредственно в центральный процессор, используя небольшую сеть прерываний управления и маршрутизации устройств. В этой главе описываются различные типы прерываний и как они обрабатываются на аппаратном уровне и операционной системы. Он также описывает, как ядро MRG Realtime отличается от стандартного ядра в обращении типы прерываний.

Стандартная система получает миллионы прерываний в течение его эксплуатации, в том числе полурегулярной «Таймер» прерывание, которое периодически выполняет ОБСЛУЖИВАНИЕ и системные решения планирования. Он также может получать специальные виды прерываний, таких как НМИ (Немаскируемое прерываний) и SMI (System Management прерываний).

Аппаратные прерывания ссылается номером прерывания. Эти цифры отображаются обратно в аппаратное устройство, которое создал прерывание. Это позволяет системе отслеживать, какие устройства, созданного на прерывание и когда это происходило.

В большинстве компьютерных систем, прерывания обрабатываются как можно быстрее. Когда прерывание получил, любой текущей деятельностью остановился и обработчик прерывания выполняется. Обработчик будет вытеснять любой другой запущенные программы и деятельность системы, которые могут замедлить всю систему, а также создавать задержек. MRG Realtime изменяет способ прерывания обрабатываются в целях повышения производительности и снижения задержки.

Пример 3.1. Просмотр прерываний в системе

Чтобы проверить тип и количество аппаратных прерываний, с помощью системы Linux, используйте команду кошка для просмотра


cat /proc/interrupts:

$ cat /proc/interruptsCPU1

: 13072311 0 IO-APIC-edge timer

: 18351 0 IO-APIC-edge i8042

: 190 0 IO-APIC-edge rtc0

: 118508 5415 IO-APIC-fasteoi acpi

: 747529 86120 IO-APIC-edge i8042

: 1163648 0 IO-APIC-edge ata_piix

: 0 0 IO-APIC-edge ata_piix

: 12681226 126932 IO-APIC-fasteoi ahci, uhci_hcd:usb2, radeon, yenta, eth0

: 3717841 0 IO-APIC-fasteoi uhci_hcd:usb3, HDA, iwl3945

: 0 0 IO-APIC-fasteoi uhci_hcd:usb4

: 577 68 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb5: 0 0 Non-maskable interrupts: 3755270 9388684 Local timer interrupts: 1184857 2497600 Rescheduling interrupts: 12471 2914 function call interrupts: 14555 15567 TLB shootdowns: 0 0 Thermal event interrupts: 0 0 Spurious interrupts: 0: 0


Вывод показывает, что различные типы аппаратного прерывания, сколько было получено, который CPU выполнял прерывания, и устройство, которое генерирует прерывание.


3. Прерывания на Уровне Сигналов


Прерывания на уровне сигналов, используют специальную линию прерывания, чтобы доставить переходы напряжения.

Выделенная линия можете отправить одно из двух напряжений для представления бинарного 1 или двоичный 0. После был послан сигнал по линии, он будет оставаться в этом состоянии до тех пор, CPU специально не сбрасывает его. Это достигается за счет процессора с просьбой производящую устройство, чтобы остановить утверждать линию. Это позволяет несколько устройств совместно использовать один линию прерываний. Если CPU поручил устройства, чтобы остановить утверждая линию, и он по-прежнему утверждал, есть другое прерывание не принято.

Хотя уровень-сигнал прерывания требуют высокого уровня логики аппаратной в обоих устройств и процессор, они также обеспечивают ряд преимуществ. Они не только могут быть использованы более чем одним устройством, но они почти совершенно не пропустить прерывание.


4. Прерывания, вызываемые сообщением


Многие современные системы используют сообщение-сигнал прерывания, которые посылают сигнал в качестве выделенного сообщения на пакете или на основе сообщений электрической шины.

Один общий пример этого типа шины PCI Express является (Peripheral Component Interconnect Express, PCIe или). Эти устройства передают сообщения в качестве типа, который PCIe хост контроллер интерпретирует как сообщение прерываний. Затем контроллер хост посылает сообщение на центральный процессор.

В зависимости от аппаратного обеспечения, система PCIe может послать сигнал с использованием выделенной линии прерываний между принимающей PCIe-контроллер и процессор, или путем отправки сообщения через (например) на шине процессора HyperTransport. Многие системы PCIe может также работать в стандартном режиме, в котором существующие линии прерываний осуществляется в целях поддержки старых операционных систем, или ядра Linux загружается с параметром PCI = nomsi в командной строке ядра.


5. Немаскируемые прерывания


Прерывания обычно, как ранее было замечено, маскируются, как правило для разделения приоритетов исполнения в ЦП. Немаскируемое прерывание (NMI), не могут быть проигнорированы, и, как правило, они используется только для критических ошибок в оборудовании.

НМП обычно поставляются по отдельной линии прерывания. Если НМП получена ЦП, то это указывает, что критическая ошибка, и что система вероятно, подвержена к сбою. NMI, как правило, лучшее свидетельство того, что может быть причиной проблемы.

Потому что НМИ невозможно игнорировать, они также используются в некоторых системах, как аппаратный монитор. Устройство посылает поток НМИ которые проверяются с помощью обработчика NMI в процессоре. Если определенные условия - например, прерывания не запускается после определенного промежутка времени - обработчик NMI может производить предупреждение и отладочную информацию о проблеме. Это помогает определить и предотвратить зависания и как следствие отказ системы.

Таким образом, НМП используются как экстренные прерывания с высокими приоритетами.


6. Системно-управляемые прерывания


Прерывания управления системой (ПУС) используются, чтобы предложить расширенную функциональность, например, эмуляции устройств устаревшем оборудовании. Они также могут быть использованы для решения задач управления системой. ПУС похожи НМП в том, что они используют специальную электрическую линию сигнализации непосредственно в процессор, и, как правило, не в состоянии быть в масках.

Когда SMI принимается, процессор перейдет в режим управления системой (SMM). В этом режиме процедура обработчик с очень низким уровнем запускается для обработки ПУС.SMM, как правило, обеспечивается непосредственно прошивки для управления системой, часто BIOS или EFI.

ПУС наиболее часто используются, чтобы обеспечить аппаратное эмуляции. Типичным примером является для эмуляции флоппи-дисковода. Если нет дискеты устройство, подключенное к системе, виртуализированной сети управляемого эмуляции может быть использован вместо. Когда операционная система пытается получить доступ к флоппи-диск, SMI срабатывает и обработчик предоставляет операционную систему с сэмулированному вместо этого. Затем операционная система обрабатывает эмуляцию как будто бы он сам наследие устройство.Realtime может оказать негативное воздействие на ПУС, потому что они происходят без непосредственного участия операционной системы. Плохо написана программа обработки SMI может потреблять много миллисекунд процессорного времени, и операционная система не сможет упредить обработчик, если это необходимо. Эта ситуация создает периодические высокие задержки в противном случае хорошо настроенной, очень быстро реагирующей системой. К сожалению, из-за SMI обработчики могут быть использованы поставщиком для управления температурой процессора и управления скоростью вращения вентилятора, это не возможно отключить, чтобы воспользоваться ими. Вместо этого, рекомендуется, что бы продавец быть в курсе проблемы, предоставляя возможность разработчикам СПО гибкость в использовании «железы».



7. Расширенный программируемый контроллер прерываний


Расширенный программируемый контроллер прерываний (APIC) был разработан корпорацией Intel®, чтобы обеспечить возможность обработки больших объемов прерываний, чтобы каждый из них, чтобы быть программно направлен в конкретном наборе доступных процессоров (и для этого должна быть изменена соответственно), для поддержки связи между CPU и устранить необходимость в большом количестве устройств использовать одну линию прерываний.представляет собой серию устройств и технологий, которые работают вместе, чтобы сформировать, маршрут и обрабатывать большое количество аппаратных прерываний в масштабируемой и управляемой образом. Он использует сочетание местного APIC, встроенного в каждом ЦП системы, а также ряд ввода /-выходом устройство APIC, подключенных непосредственно к аппаратным устройствам. Когда аппаратное устройство генерирует прерывание, то обнаруживается IO-APIC он подключен к, а затем направляется через систему шины APIC для конкретного процессора. Операционная система знает, какие IO-APIC подключен к которому устройство, и какие именно линии прерываний в течение этого устройства из комбинации информационных источников. Во-первых, есть ACPI DSDT (Advanced интерфейс конфигурации и питания дифференцированная система Описание Таблица), что включает в себя информацию о конкретной проводки хост-системы материнской платы и периферийных компонентов. Во-вторых, устройство обеспечивает определенную информацию о имеющихся источников прерываний. Вместе, эти два набора данных предоставить информацию об общей иерархии прерываний.

Комплексные стратегии APIC на основе управления прерывания возможны, с системой устройство APIC, связанных в иерархиях и доставки прерываний процессоров в сбалансированной мере, а не нацелены на конкретную архитектуру процессоров или набор процессоров.

Заключение


Очевидно, что каждый микроконтроллер и микропроцессор обрабатывает прерывания несколько иначе, но все они имеют некоторые общие функциональные возможности. В принципе, прерывание вызывает программу приостановить свою текущую деятельность и начать обработку другой ветки в место, в другом месте в памяти. Затем, после того как программа обрабатывает событие, которое вызвало прерывание, подпрограмма обслуживания прерывания (ISR - служба обработчик прерыв.), необходимо перезапустить программу от того, где он ранее был приостановлен.

Электрические, прерывание цифрового сигнала в процессор, что указывает на то что некоторое событие уже произошло. Например, получив серийный информацию, нажатие клавиши или таймер истекает все может генерировать прерывание. Расширение на нажатие клавиши, например, общий способ генерации прерывания является с почтенный 74C923 20-позиционной клавиатуры кодера. Когда вы нажимаете на клавишу, подавлением шумовых данных этого чипа Доступно (DA) сигнал становится высоким и остается там, пока вы не отпустите кнопку. Связывая этот сигнал на один из входов прерываний в ЦПУ, процессор может ощущать нажатие клавиши, как только это произойдет.

Прерывания бывают трех вариантах: по фронту, уровень-срабатывает и их комбинации. Как следует из названия, по фронту прерывания произойдет при переходе сигнала из одного состояния в другое, в первую очередь с нуля в One. Этот тип прерывания полезно для мимолетного сигнала, не длится достаточно долго для процессора признать его с помощью опроса I/O или когда сигнал может длиться долго, но значимое событие, когда, что первый сигнал становится активным, Опять же, нажатие является отличным примером приложения, которое для края вызвало прерывание. С точки зрения прерывание, в количество времени, вы держите ключ вниз не имеет значения. Все, что важным является определить, когда событие сначала происходит.

В отличие от этого, уровень-срабатывает прерывания в некоторых отношениях, как опрос исключением того, что процессор управляет опроса без вмешательства программы. Как правило, процессор образцы прерывания, поступающие на определенное время в течение каждого цикла шины, такие как государственного Т2 для микропроцессора Z80. Если прерывание не работает, когда процессор образцы его, CPU не видит его. Одно из возможных применений этого типа прерывания является сведение к минимуму ложные сигналы от шумной линии прерываний.

Последние прерывание типа представляет собой гибрид, в котором аппаратные средства не только выглядит для перехода, но она также подтверждает, что сигнал прерывания остается активным в течение определенного периода времени. Общая гибрид прерывание NMI (немаскируемое прерывание) вход. Поскольку, как правило НМИ сигнал основные или даже катастрофические-системных событий, хорошая реализация этого сигнала пытается гарантировать, что прерывание действительно, проверив, что он остается активным в течение определенного периода времени. Это 2-х ступенчатый подход помогает избежать ложных прерываний от воздействия на систему.

Обработка прерывания

Хорошо, теперь у вас есть сигнал прерывания на CPU, следующий шаг, чтобы увидеть, как она влияет на работу процессора. Ни один метод не описывает все возможные формы обработки прерываний, так что я начну с простого описания и далее о более сложном.

Обработка прерываний имеет некоторые основные требования от процессора. Прежде, чем это может ответить на прерывание, процессор должен ждать «прерываемые» состояния в его обработке. Например, если процессор пишет в память, он должен ждать, пока записи не будет сделано перед обработкой прерываний. После того, как CPU обнаруживает прерывание, его первое действие, чтобы сохранить всю информацию, нужно будет возобновить нормальную обработку сразу прерывания закончена. По крайней мере, чип сохраняет программы по борьбе (ПК). Этот процесс аналогичен вы, поместив палец в книге, когда кто-то прерывает вас, пока вы читаете. После перерыва уходит, вы точно знаете, где, чтобы продолжить.

После сохранения этого «закладки» информации, процессор изменяет значение ПК на фиксированном месте в памяти процессора, который содержит указатель на инструкции называемый подпрограмма обслуживания прерывания (ISR) - Это говорит процессору, как бороться с прерыванием. Когда ISR отделки, процессор восстанавливает первоначальную ПК и весело продолжает, как будто ничего не случилось.

НМИ отличным примером этого наиболее основной формы прерывания. Многие процессоры имеют специальную прерывания штифт, отведенное для маркировки таких катастрофических событий, как сбоя питания. Используя этот прерывание может позволить вам несколько миллисекунд, в котором, чтобы сохранить важную информацию по эксплуатации или выключить систему, прежде чем власть полностью погибает.

Помимо этих основах, прерывания часто спорту некоторые усовершенствования, которые делают их еще более полезным. Например, одна общая особенность для мультиплексирования один вход прерывания, позволяя источник прерывания отправить идентификационный код вместе с сигналом, что позволяет процессору определить, какой произошло прерывание. Этот код может принимать форму на адрес, где процессор может найти ISR для этой конкретной прерывания или индекс в таблице, где процессор может найти адрес в ISR-х годов. Код обычно идет в процессор на линиях данных.

При возникновении прерывания, процессор также посылает сигнал подтверждения аналогично памяти CPU читать сигнал, что другие части использования системы для размещения информации на шине данных процессора. Я видел вопрос процессоров от одного до четырех из них признают сигналы для каждого прерывания. Такие множественные сигналы позволяют процессору получить дополнительную информацию о прерывании из аппаратных средств.

В зависимости от микропроцессора, эта информация может быть в форме либо вектора или адрес исполняемого кода операции. Последнее может поддается в некоторых довольно своеобразных реализациях.- Процедура обработчик прерывания основы

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



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


1.http://ru.wikipedia.org/wiki/Прерывание

2.#"justify">Приложение


Драйвер клавиатуры на базе архитектуры 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 <Linux / kernel.h> / * Мы делаем ядра работает * /

#include <Linux / module.h> / * В частности, модуль * /

#include <Linux / sched.h>

#include <Linux / workqueue.h>

#include <Linux / interrupt.h> / * Мы хотим прерывания * /

#include <ASM / io.h>


#define MY_WORK_QUEUE_NAME «WQsched.c»

struct workqueue_struct * my_workqueue;


/ *

* Это будет вызван ядром, как только это безопасно

* Сделать все нормально, разрешенный модулей ядра.

* /void got_char (void * scancode)

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

(INT) * ((Char *) scancode) & 0x7F,

* ((Char *) scancode) & 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 (& task got_char, & scancode);= 1;

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

}

_work (my_workqueue, & task);


return IRQ_HANDLED;

}


/ *

* Инициализация модуля - зарегистрировать обработчик прерываний

* /init_module ()

{_workqueue = create_workqueue (MY_WORK_QUEUE_NAME);


/ *

* С обработчик клавиатуры не будет сосуществовать с другим обработчиком,

* Как США, мы должны отключить его (освободить IRQ) прежде, чем мы делаем

* Что-нибудь. Так как мы не знаем, где он находится, нет никакого способа, чтобы

* Возможности переустановить его - поэтому компьютер придется перезагрузить

* Когда мы сделали.

* /_irq (1, NULL);


/ *

* Запрос IRQ 1, IRQ клавиатуры, чтобы перейти к нашей irq_handler.

* SA_SHIRQ означает, что мы готовы иметь суются обработчики на этом IRQ.

* SA_INTERRUPT могут быть использованы, чтобы обработчик в быстрого прерывания.

* /request_irq (1, / * о IRQ клавиатуры номер на ПК * /

irq_handler, / * наш обработчик * /_SHIRQ, «test_keyboard_irq_handler»,

(void *) (irq_handler));

}


/ *

* Убирать

* /cleanup_module ()

{

/ *

* Это только здесь для полноты картины. Это совершенно не имеет значения, так как

* Мы не есть способ восстановить нормальную прерываний от клавиатуры, так

* Компьютер совершенно бесполезно и должен быть перезагружен.

* /_irq (1, NULL);

}


/ *

* Некоторые функции work_queue связанные только доступны GPL лицензированных модулей

* /_LICENSE («GPL»);


На практике обращения с IRQ может быть немного сложнее. Оборудование часто разработаны таким образом, что цепи двух контроллеров прерываний, так что все IRQs от контроллера прерываний В каскадированы в определенной IRQ от контроллера прерываний А. Конечно, что требует, чтобы ядро находит, какие IRQ это действительно было потом, и что добавляет накладные расходы. Другие архитектуры предложить какую-то особую, очень низкие накладные расходы, так называемый «быстрый IRQ» или FIQs. Для того чтобы воспользоваться им требуется обработчики быть написан на ассемблере, поэтому они не очень вписывается в ядро. Они могут быть сделаны, чтобы работать похожи на других, но после этой процедуры, они больше не быстрее, чем «обычных» прерываний. SMP с поддержкой ядра, работающие на системах с более чем одним процессором нужно решить еще один грузовик проблем. Это не достаточно, чтобы знать, если некоторые прерываний имеет случилось, это также важно, по какой процессора (ов) это было для. Люди по-прежнему заинтересованы в более подробной информации, возможно, захотите сделать веб-поиска для «APIC» сейчас;)


Введение программирование управление вычислительный интеллектуальный Любое встроенное приложение (от холодильников до приборов в тепловозе) обычно включае

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ