interrupt
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| interrupt [2026/10/25 16:48] – gecko | interrupt [2026/10/25 17:06] (текущий) – gecko | ||
|---|---|---|---|
| Строка 53: | Строка 53: | ||
| Чтобы безопасно поместить элемент в очередь, | Чтобы безопасно поместить элемент в очередь, | ||
| + | |||
| + | BIOS по цепочке вызывает все зарегистрированные обработчики прерываний. Каждый обработчик должен проверить нужный бит регистра I_STAT и подтвердить его, записав в него ноль. Например: | ||
| + | |||
| + | <code c> | ||
| + | int irqVBlank() | ||
| + | { | ||
| + | if ((*I_STAT & IRQ0) && (*I_MASK & IRQ0)) | ||
| + | { | ||
| + | // Reset VBlank bit | ||
| + | *I_STAT = ~IRQ0; | ||
| + | } | ||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Поскольку такой подход может привести к конфликтам, | ||
| ===== Функции BIOS, относящиеся к обработке прерываний ===== | ===== Функции BIOS, относящиеся к обработке прерываний ===== | ||
| Строка 59: | Строка 75: | ||
| * С(03h) - SysDeqIntRP(priorityIndex, | * С(03h) - SysDeqIntRP(priorityIndex, | ||
| + | |||
| + | * B(18h) - ResetEntryInt() - удаляет все пользовательские обработчики. | ||
| * int EnterCriticalSection(), | * int EnterCriticalSection(), | ||
interrupt.1792946907.txt.gz · Последнее изменение: — gecko
