This is topic Написание драйвера DOS in forum Драйверы / Device Drivers at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/14/t/000028.html

Posted by angel (Участник № / Member № 596) on :
 
Можно увидеть пример рабочего драйвера для работы с платами УСО????
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
1) Какой именно тип: через прерывание или через точку вызова?
2) Исходники реальных драйверов показать вряд ли возможно. Лучше поясните в чем конкретно проблема?
 
Posted by angel (Участник № / Member № 596) on :
 
Проблема написания драйвера модуля D48i контроллера TKM52! Работаем через точку вызова.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Так в чем собственно проблема? [Улыбка / Smile]
 
Posted by angel (Участник № / Member № 596) on :
 
Исходник PLEASE
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Исходника нет - для D48i вообще нет поддержки (пока). Как мы можем его показать?
[Недоумение / Confused]
Если возникают какие-либо трудности по написанию драйвера - пожалуйста, спрашивайте, поможем. Однако я так и не получил от Вас никаких описаний конкретных проблем, которые у Вас возникаю в написании драйвера! [Недоумение / Confused]
 
Posted by angel (Участник № / Member № 596) on :
 
Конкретно меня интересует, как обмениватся информацией через точку вызова посмотреть кусок кода или какую нибудь документацию по написанию драйвера [Недоумение / Confused] . Кроме Help'а ес-но. [Неодобрение / Frown]
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Вот например, если заменить код, который обрабатывает алгоритмы обращения к УСО коментариями, то исходный код можно представить как:
code:
 #include <dos.h>
#include <stdio.h>

long *ad;

typedef union
{
unsigned char c[6];
unsigned short int i[3];
}
IA;


int RWH(unsigned short type, IA &ia, unsigned short *v) //Прототип драйвера
{
switch (type){
case 0x8000: // Первый вызов драйвера
return 0;
case 0x1000: // Последний вызов драйвера
return 0;
case 0x2000: // AI RWH & AO RWH инициализация
// Можно оставить код пустым или реализовать какие-либо алгоритмы
// например, инициализации платы УСО
return 0;
case 0x3000: // DI RWH & DO RWH Инициализация
// Можно оставить код пустым или реализовать какие-либо алгоритмы
// например, инициализации платы УСО
return 0;
case 0x4000: // AO RWH Обработка Аналогов - Выходы
// Считали адрес ia - в соответсвии с настройками послали в устройство значение v
return 0;
case 0x5000: // AI RWH Обработка Аналогов - Входы
// Считали адрес ia - в соответсвии с настройками считали из устройства значение и присвоили его в v
return 0;
case 0x6000: // DO RWH Обработка Дискретов - Выходы
// Считали адрес ia - в соответсвии с настройками послали в устройство значение v
return 0;
case 0x7000: // DI RWH Обработка Дискретов - Входы
// Считали адрес ia - в соответсвии с настройками послали в устройство значение v
return 0;
case 0xa000: // INPUT VOID_RWH - посылка значений в базу каналов
// управляя адресом ia посылаем новые значения в атрибуты каналов
return 0;
case 0xb000: // OUPUT VOID_RWH - чтение атрибутов из базы каналов
// управляя адресом ia считываем значения атрибутов каналов
return 0;
}
return 0;
}

int main (void)
{
union REGS inr;
ad=(long*)MK_FP(0,0x04f0); // Set call address
*ad=(long)RWH; // Driver procedures
inr.x.ax=0x3100; // Exit to DOS
inr.x.dx=800; // Normal finishing
intdos(&inr,&inr); // of the resident code
return 0;
}

Смысл в том, что соответствующие каналы вызывают прототип драйвера с соответствующим кодом type. Это зависит от типа, подтипа и дополнения к подтипу канала, который его вызвал. В структуре ia - передаются настройки канала, а в переменной v - его значение. Вот и вся идеология.
 
Posted by angel (Участник № / Member № 596) on :
 
Спасибо ! это то что я хотел [Улыбка / Smile] [Усмешка / Big Grin] [Пдмигивание / Wink]
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2