Delphi, работа с портами.

Gasparfx

Народ, есть проблема: нужно в программе осуществить работу с портами (для работы с самодельной железкой). Я это делал через ассемблерные процедуры IN и OUT в тексте программы. Но это работает только в win 98/9x а в win 2000/XP отказывается работать, ругаясь при этом: "Privileged instructions".
Мне посоветовали написать драйвер, но я в этом полный ламер и не знаю в чём его делать и как? Можно ли его написать в том же Delphi?

psm-home

На Delphi драйвер написать нельзя. То есть я никогда о таком не слышал, и если это даже и есть в природе, то это чудовищное извращение. Можно либо использовать уже готовый драйвер, который будет либо выполнять внутри себя READ_PORT/WRITE_PORT, либо разрешит твоему процессу ввод/вывод (это хак). Примеры ищутся гуглом по слову "giveio".
P.S Эта тема вроде бы уже обсуждалась на форуме.

Zvetik

Зайди 10.15.10.202\советы и описания\программирование\CPort263.zip
Возми CPort263.zip это компонент работы с компортами для С++ и Delphi работает под всеми Windami

stm5999302

Еще есть сайт там много всяких примеров, может найдешь что-нибудь нужное

daru

.Мне посоветовали написать драйвер.

Реально драйвер нужен. Как железка прицеплена-то? (PC I /USB / COM /.?)

hov77

Зачем дрова ?
Если нужно записывать/читать из COM порта достаточно использоваться winapi функции СreateFile, ReadFile, WriteFile
В ответ на:
Communications Resources
The CreateFile function can create a handle to a communications resource, such as the serial port COM1. For communications resources, the dwCreationDisposition parameter must be OPEN_EXISTING, and the hTemplate parameter must be NULL. Read, write, or read/write access can be specified, and the handle can be opened for overlapped I/O. For more information about communications, see Communications.

Gasparfx

Железка самодельная, для управления прибором, висит на ISA шине и использует свои порты от 0x300 до 0x30b. Так что работа с COM-портом не катит.

daru

Так что работа с COM-портом не катит.

Это не я предлагал. Я предлагал драйвер писать. Это не слишком сложно. Хотя и несколько муторно.

Gasparfx

Так собственно, на чём его писать то?

psm-home

Для создания драйверов Windows обычно используется Driver Development Kit. Они бывают различных версий, тебе подойдёт Win2k DDK или WinXP DDK. Они есть в сетке, lorien'ом находятся. DDK содержит в себе всё необходимое для сборки драйверов под целевую платформу, нефиговое количество help'ов, примеры драйверов (очень полезно туда смотреть когда пишешь свой отладчик WinDbg и всякие tool'ы. Помимо DDK существуют примочки для создания драйверов от сторонних производителей. Например DriverStudio от фирмы NuMega. Это штука, которая ставится поверх DDK и предоставляет тебе готовый каркас, чтобы не создавать драйвер с нуля. Туда также входит хороший отладчик - SoftICE. Впрочем, в твоём случае (драйвер для ISA железки без PnP я думаю, можно обойтись одним DDK. Разработка ведётся на языке C. Иногда бывают вкрапления asm, но это не твой случай. Использовать С++ тоже можно, если сильно хочется, но там есть свои моменты (нельзя использовать исключения, нельзя использовать CRT тебе это тоже скорее всего не надо. Про WinAPI в драйвере можно забыть, его функции из режима ядра вызвать нельзя (то есть если очень-очень хочется, то можно, но сложно). Под NT-подобными ОС есть Native API, оно частично описано в help'е DDK. Под win98 для WDM драйверов эмулирована часть Native API (а то как бы они там работали). Литературы по разработки драйверов всегда мало. Так что вот несколько ссылок:
1. Oney, Walter. Programming the Microsoft Windows Driver Model.
В нашей сетке есть 1 и 2 издания. Must read, однозначно.
2. Art Baker, Jerry Lozano. The Windows 2000 Device Driver Book, A Guide for Programmers
Опять таки есть в сетке.
3. Gary Nabbet Windows NT Native API
Насчёт сетки не знаю, в инете точно где-то валялась.
4. Раздел "Низкоуровневое программирование" сайта .
Только сначала ищи по разделу, а потом спрашивай, а то местные гуру обижаются.
5. Сайт .

daru

Целиком и полностью согласен с предыдущим оратором.
В добавок:
DDK есть на моей машине. Nu Mega Driver Studio (старенькая - для Win2k) 2.5 - там же.
В сетке вроде видел 2.6 (для XP годится). Как минимум SoftIce из комплекта DS must have.
Насчёт литературы.
Прочитать, конечно, всё это надо. для общего развития, но. Если железка не слишком сложная и драйвер не планируется массово распространять (проходить сертификацию в Microsoft и проч. то можно во всё это не вникать, а попробовать взять один из примеров из DDK / DS и подогнать его под свои нужны.

Gasparfx

Огромное спасибо за подробнейшую инфу. Попробую сделать.
Оставить комментарий
Имя или ник:
Комментарий: