DOS-extender для компилятора Borland C++ 3.1
| Категория реферата: Рефераты по информатике, программированию
| Теги реферата: решебник по геометрии класс, дипломная работа методика
| Добавил(а) на сайт: Savinkov.
Предыдущая страница реферата | 3 4 5 6 7 8 9 10 11 12 13 | Следующая страница реферата
{ vi_print(5, 16, Buf, 0x1f); sem_set(1);
} flipflop1 ^= 1; delay_cnt1 = 0l; asm sti
} delay_cnt1++;
}
}
word flipflop = 0; long delay_cnt = 0l;
// Эта задача также периодически выводит на экран
// с меньшим периодом. Кроме того, эта задача
// работает только тогда, когда установлен
// семафор номер 1.
void flipflop_task(void)
{ char Buf[B_SIZE + 1]; // Буфер вывода задачи 2 static TLabel Label1; static TLabel Label2;
memset(Buf, ' ', B_SIZE);
Buf[B_SIZE] = 0;
Label1.Pos = 0;
Label1.Dir = 1;
Buf[Label1.Pos] = '/';
Label2.Pos = B_SIZE;
Label2.Dir = 0;
Buf[Label2.Pos] = '';
vi_print(30, 12, "Работает задача 0:", 0x7f);
while(1)
{ asm sti if (delay_cnt > 20000l )
{ sem_wait(1); // ожидаем установки семафора asm cli
StepLabel(&Label1, &Label2, Buf); vi_print(5, 13, Buf, 0x1f); flipflop ^= 1; delay_cnt = 0l; asm sti
} delay_cnt++;
}
}
word keyb_code;
extern word keyb_status;
// Эта задача вводит символы с клавиатуры
// и отображает скан-коды нажатых клавиш
// и состояние переключающих клавиш на экране.
// Если нажимается клавиша ESC, задача
// устанавливает семафор номер 0.
// Работающая параллельно главная задача
// ожидает установку этого семафора. Как только
// семафор 0 окажется установлен, главная задача
// завершает свою работу и программа возвращает
// процессор в реальный режим, затем передаёт
// управление MS-DOS.
void keyb_task(void)
{ vi_print(32, 20, " Key code: .... ", 0x20); vi_print(32, 21, " Key status: .... ", 0x20); while(1)
{ keyb_code = kb_getch(); vi_put_word(45, 20, keyb_code, 0x4f); vi_put_word(45, 21, keyb_status, 0x4f); if ((keyb_code & 0x00ff) == 1) sem_set(0);
}
}
4.5 Файл SEMAPHOR.C. Содержит процедуры для работы с семафорами.
#include
#include
#include
#include
#include "tos.h"
// Массив из пяти семафоров
word semaphore[5];
// Процедура сброса семафора.
// Параметр sem - номер сбрасываемого семафора
void sem_clear(int sem)
{ asm cli semaphore[sem] = 0; asm sti
}
// Процедура установки семафора
// Параметр sem - номер устанавливаемого семафора
void sem_set(int sem)
{ asm cli semaphore[sem] = 1; asm sti
}
// Ожидание установки семафора
// Параметр sem - номер ожидаемого семафора
void sem_wait(int sem)
{ while (1)
{ asm cli
// проверяем семафор if (semaphore[sem]) break;
asm sti // ожидаем установки семафора asm nop asm nop
} asm sti
}
4.6 Файл TIMER.C. Процедуры для работы с таймером и диспетчер задач.
Cодержит обработчик аппаратного прерывания таймера, который
периодически выдаёт звуковой сигнал и инициирует работу диспетчера задач.
Диспетчер задач циклически перебирает селекторы TSS задач, участвующих в
процессе разделения времени, возвращая селектор той задачи, которая должна
стать активной. В самом конце обработки аппаратного прерывания таймера
происходит переключение именно на эту задачу.
#include
#include
#include
#include
#include "tos.h"
// ----------------------------------------
// Модуль обслуживания таймера
// -------------------------------------------
Рекомендуем скачать другие рефераты по теме: диплом купить, скачать конспект урока.
Категории:
Предыдущая страница реферата | 3 4 5 6 7 8 9 10 11 12 13 | Следующая страница реферата