Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.11;
Скачать: CL | DM;

Вниз

Проблема...перекодить несколько функций из C в Delphi...   Найти похожие ветки 

 
Atrion ©   (2005-07-22 01:56) [0]

Вот достался мне древний код написанный на сях. Все интерфейсные функции я
вырвал из кода, чтобы не громоздить тут много. Оставил только работу с портом...прошу помочь мне. Т.е. написать
эквивалент сишного кода на Delphi...

Кстати эти функции эквивалентны???:
 inportb>>>WriteFile
 outportb>>ReadFile
???

#include <graphics.h>
#include <dos.h>
#include <dir.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <math.h>
#define ON 1
#define OFF 0

void help(void);

void RD_DATA(void);        /*однократное считывание с АЦП*/
void STR_RD_DATA(void); /*считывание с АЦП, стробируемое угловой меткой */
void MOTOR_DRV(void); /* запуск и останов двигателя*/

   char key,motor_state=OFF,snd=ON;
   int baseport=0x378;   //адрес базового порт        
   signed int data,U1,U2,dataarray[7200];                  // данные с АЦП
   int point_number;

int main(void)
   {
   outportb(baseport,192);//инициализация порта
   
 
   

   

/******************************* HARD DRIVERS *******************************/

       /* однократное считывание с АЦП */

void RD_DATA()
   {
   int i,a;
   data=0;
   a=(inportb(baseport)|32);
   outportb(baseport,a);
   a=a&223;
   outportb(baseport,a);//пуск АЦП
   a=8;
   while(a==8)
   a=(inportb(baseport+1)&8);//ожидание готовности АЦП
   a=(inportb(baseport)&191);
   outportb(baseport,a);
   a=a|64;
   outportb(baseport,a);//запись в сдвиговый регистр
   for(i=0;i<11;i++)
      {
      data=data>>1;
      a=(inportb(baseport+1)&64);
      a=a<<4;
      data=data|a;//считывание с регистра
      a=(inportb(baseport)&127);
      outportb(baseport,a);
      a=a|128;
      outportb(baseport,a);//тактирование регистра
      }
   if(data<1024) data=-data;
   else data=data-1024;
   }

      /* считывание с АЦП,стробируемое угловой меткой */

void STR_RD_DATA()
   {
   int a;
   a=0;
   while(a!=16)
   a=(inportb(baseport+1)&16);
   RD_DATA();
   while(a==16)
   a=(inportb(baseport+1)&16);
   }

        /* драйвер двигателя */

void MOTOR_DRV()
   {
   int a;
   a=(inportb(baseport)^8);
   outportb(baseport,a);
   motor_state=motor_state^1;
   }


 
alpet ©   (2005-07-22 07:11) [1]

procedure  OutportB (port, value: Cardinal); assembler;
asm
push     ebx
push     edx
movzx    edx, word ptr [port]
movzx    eax, byte ptr [value]
out      dx, al  
mov      bx, 10
div      bx    // delay for hardware reaction (about 10-40 ticks)
pop      edx
pop      ebx
end; // OutportB

function   InportB (port: Cardinal): byte; assembler;
asm
push     dx
mov      dx, word ptr [port]
in       al, dx
pop      dx
end;


 
Atrion ©   (2005-07-22 20:11) [2]

alpet ©   (22.07.05 07:11) [1]
такс понятненько...

а если без асемблерных вставок?...
в Delphe же много прекрасных функций для работы с портами..что посоветуете?....


 
alpet ©   (2005-07-23 00:24) [3]

В Turbo Pascal такой синтаксис:

port [port_num] := value;
value := port [port_num];

В Delphi его есстно упразднили - не планировалось, что язык кто-то будет использовать для написания драйверов.


 
Atrion ©   (2005-07-23 02:10) [4]

alpet ©   (23.07.05 00:24) [3]
  Turbo Pascal да раньше много чего хорошего было...
Спасибо что помог немножко... правда я собирался через:
 CreateFile(0,PChar("LPT1"),....);
 WriteFile(const Buffer;Size,wrSize,0)
 ReadFile(....)
...
 что так будет проще или я ошибаюсь?...


 
alpet ©   (2005-07-23 09:42) [5]

Atrion ©   (23.07.05 02:10) [4]

Точно сказать не могу, будет такой способ работать или нет. Во всяком случае известные мне примеры работы с драйверами, выглядели примерно так:

hFile := CreateFile ("Device\SomeDevice", ...);
WriteFile (hFile, buff, buff_size, writed, nil);

Для уточнения рекомендую почитать DDK.


 
isasa ©   (2005-07-23 12:07) [6]

И под какой OS будем работать.
Если не связываться с секьрити то, нормально, через ф-цию API CreateFile.
В противном случае(в OS NT и выше), придется оформлять приложение с правами драйвера системы.


 
Atrion ©   (2005-07-23 17:27) [7]

в основном ориентировка идет на 98...там мощный компутер не нужен так что 98 обойдутся...

ну а если затребуют на выше NT видимо придется по методике isasa



Страницы: 1 вся ветка

Текущий архив: 2005.09.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
9-1116308650
MsShtaer
2005-05-17 09:44
2005.09.11
Люди, где можно скачать компонент TFPSGame


14-1124301761
lookin
2005-08-17 22:02
2005.09.11
Ошибки страницы...


4-1121870239
Profik
2005-07-20 18:37
2005.09.11
Прога в трее


1-1124464980
Андрей Молчанов
2005-08-19 19:23
2005.09.11
свои иконки в ShellList


1-1124358785
Laymer
2005-08-18 13:53
2005.09.11
Отчеты!!!!