Системное программное обеспечение персональных ЭВМ


Пример 7



Пример 7

/*== ПРИМЕР 6.6 ==*/ /*==================== Модель АЦП ===============*/ #include <dos.h>

#include <math.h>

#define TIMEINT 8 #define NN 100 /* Максимальное число отсчетов */ void interrupt (*oldtime)(); void interrupt newtime(); static int y[NN]; /* Накопитель отсчетов */ static int ny; /* Индекс в массиве y */ static int yc; /* Текущее значение sin */ static int kf; /* Счетчик вызовов oldtime */ union REGS rr; struct SREGS sr; void *readvect(int in); void writevect(int in, void *h);

main() { unsigned oldtic=65535; /* Старый коэфф.деления */ unsigned newtic=4095; /* Новый коэфф.деления */ unsigned char d; int k; double x; /* Аргумент ф-ции sin */ char line[81]; /* Строка для вывода */ for (ny=0; ny>8); /* Старший байт счетчика */ ny=-1; /* Признак того, что АЦП еще не началось */ kf=15; /* Подключение к вектору */ oldtime=readvect(TIMEINT); writevect(TIMEINT,newtime); /* Запуск "непрерывного процесса" */ for (x=ny=0; ny>8); /* Старший байт счетчика */ /* Вывод запомненных результатов */ for(ny=0; ny=0) /* Если АЦП началось, */ &&(ny<NN)) /* и NN отсчетов еще не набрано, */ y[ny++]=yc; /* запоминание очередного отсчета */ } /*==== Получение старого вектора ====*/ void *readvect(int in) { rr.h.ah=0x35; rr.h.al=in; intdosx(&rr,&rr,&sr); return(MK_FP(sr.es,rr.x.bx)); } /*==== Запись нового вектора ====*/ void writevect(int in, void *h) { rr.h.ah=0x25; rr.h.al=in; sr.ds=FP_SEG(h); rr.x.dx=FP_OFF(h); intdosx(&rr,&rr,&sr); }

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


- Начало -  - Назад -  - Вперед -