![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема...перекодить несколько функций из C в Delphi... [D6]
Atrion © (2005-07-22 01:56:00)Вот достался мне древний код написанный на сях. Все интерфейсные функции я
вырвал из кода, чтобы не громоздить тут много. Оставил только работу с портом...прошу помочь мне. Т.е. написать
эквивалент сишного кода на Delphi...
Кстати эти функции эквивалентны???:
inportb>>>WriteFile
outportb>>ReadFile
???
#include
#include
#include
#include
#include
#include
#include
#include
#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>1;
a=(inportb(baseport+1)&64);
a=a
Atrion (2005-07-23 17:27:00) [1]в основном ориентировка идет на 98...там мощный компутер не нужен так что 98 обойдутся...
ну а если затребуют на выше NT видимо придется по методике isasa
isasa (2005-07-23 12:07:00) [2]И под какой OS будем работать.
Если не связываться с секьрити то, нормально, через ф-цию API CreateFile.
В противном случае(в OS NT и выше), придется оформлять приложение с правами драйвера системы.
alpet (2005-07-23 09:42:00) [3]Atrion © (23.07.05 02:10) [4]
Точно сказать не могу, будет такой способ работать или нет. Во всяком случае известные мне примеры работы с драйверами, выглядели примерно так:
hFile := CreateFile ('Device\SomeDevice', ...);
WriteFile (hFile, buff, buff_size, writed, nil);
Для уточнения рекомендую почитать DDK.
Atrion (2005-07-23 02:10:00) [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 00:24:00) [5]В Turbo Pascal такой синтаксис:
port [ port_num] := value;
value:= port [ port_num];
В Delphi его есстно упразднили - не планировалось, что язык кто-то будет использовать для написания драйверов.
Atrion (2005-07-22 20:11:00) [6]alpet © (22.07.05 07:11) [1]
такс понятненько...
а если без асемблерных вставок?...
в Delphe же много прекрасных функций для работы с портами..что посоветуете?....
alpet (2005-07-22 07:11:00) [7]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;