отправлено / posted
1) Какой именно тип: через прерывание или через точку вызова? 2) Исходники реальных драйверов показать вряд ли возможно. Лучше поясните в чем конкретно проблема?
Сообщения / Posts 17314 | Из / From: Россия
| IP / IP: IP адрес / IP address |
angel
Junior Member / Новичок
Участник № / Member № 596
отправлено / posted
Проблема написания драйвера модуля D48i контроллера TKM52! Работаем через точку вызова.
Сообщения / Posts 14 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
Исходника нет - для D48i вообще нет поддержки (пока). Как мы можем его показать?
Если возникают какие-либо трудности по написанию драйвера - пожалуйста, спрашивайте, поможем. Однако я так и не получил от Вас никаких описаний конкретных проблем, которые у Вас возникаю в написании драйвера!
Сообщения / Posts 17314 | Из / From: Россия
| IP / IP: IP адрес / IP address |
angel
Junior Member / Новичок
Участник № / Member № 596
отправлено / posted
Конкретно меня интересует, как обмениватся информацией через точку вызова посмотреть кусок кода или какую нибудь документацию по написанию драйвера . Кроме Help'а ес-но.
Сообщения / Posts 14 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
Вот например, если заменить код, который обрабатывает алгоритмы обращения к УСО коментариями, то исходный код можно представить как:
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 - его значение. Вот и вся идеология.
Сообщения / Posts 17314 | Из / From: Россия
| IP / IP: IP адрес / IP address |
angel
Junior Member / Новичок
Участник № / Member № 596