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

Вниз

Как переписать код на Си в делфи? заранее благодарен   Найти похожие ветки 

 
promelectronika   (2003-09-10 15:02) [0]

float f;
void main()
{
unsigned char *cc, mm[7];
port_init(0,207);
printf(" ‘“ЊЊЂ =");
sport(0,84); /* T */
delay(100);
sport(0,48); /* 0 */
delay(100);
sport(0,70);/* F */

for(i=0;i<=7;i++)
mm[i]=rport(0);
delay(1000);
for(i=1;i<=4;i++)
printf("<%x>",mm[i]);
/* Џђ…ЋЃђЂ‡Ћ‚ЂЌ€… Џђ€Ќџ’›• „ЂЌЌ›• ‚ ”ЋђЊЂ’ "FLOAT" */
cc = (unsigned char *)&f ;
for(i = 1 ; i <=4 ; i++)
*cc++ = mm[i] ;
printf("%.2f", f) ;

}


 
Saint_Byte   (2003-09-10 17:08) [1]

Это скорее всего на паскаль надо переписывать


 
Saint_Byte   (2003-09-10 17:10) [2]

sport(0,84); и еще что это за Саба ???

Дык это написано с кучей самописных саб вот ... Так что =(((


 
=Sniper=   (2003-09-10 22:51) [3]

Ради прикола попробовал перевести! %-)

PROGRAM cool;
var
f : double;
cc : Pchar;
mm7:array[0..6] of Pchar

begin
port_init(0,207);
Write(" ‘“ЊЊЂ =");
sport(0,84);// T
delay(100);
sport(0,48);// 0
delay(100);
sport(0,70);// F
for i:= 1 to 7 do
mm[i] := rport(0);
delay(1000);
for i:= 1 to 4 do
write("<%x>",mm[i]);

// cc = (unsigned char *)&f ; не знаю что это такое! %-)
for i:= 1 to 4 do
*cc++ = mm[i] ;//не знаю что это такое! %-)
write("%.2f", f) ;
end.


 
mzu   (2003-09-11 09:42) [4]

Ради прикола можно использовать транслятор, входящий в комплект Gnu Compiler Collection ...


 
savva ©   (2003-09-11 11:04) [5]

> // cc = (unsigned char *)&f ; не знаю что это такое! %-)
получаем ссылку по значению на первый байт чилса F
> for i:= 1 to 4 do
> *cc++ = mm[i] ;//не знаю что это такое! %-)
а дальше проходимся, наращиваем указатель и заполняем послеовательно..


 
xxxXXxx   (2003-09-11 11:16) [6]

Удалено модератором
Примечание: offtopic


 
=Sniper=   (2003-09-11 13:12) [7]

2 savva: спасибо буду знать! :-)
И ещё объясни чё это такое:
&&
!=

???


 
AKuman   (2003-09-11 13:57) [8]

&& - логическое умножение, на Паскале and

!= - не равно <>

Вообще судя по всему эта С-программа читает побайтно вещественное число из аппаратного порта 207 (Вероятно показания датчика).
Вот только набор функций port_init(), sport(), rport() я не припомню. Надо посмотреть в справочнике по С. :-)


 
AKuman   (2003-09-11 14:08) [9]

Кстати, если кто помнит, в Turbo/Borland Pascale с портами работали как с массивом.
Например:
var
ByteFromPort : Byte;
begin
ByteFromPort := Port[207];
Port[207] := $01;
end.


А как в Дельфи? Кто знает?


 
first_aid ©   (2003-09-11 14:19) [10]

2 AKuman

А в Дельфи, нет такого, под NT например с портами напрямую работать нельзя.


 
Reindeer Moss Eater ©   (2003-09-11 15:06) [11]

www.google.com + "c2pas"


 
AKuman   (2003-09-11 15:21) [12]

2 Reindeer Moss Eater ©

//www.google.com + "c2pas"

c2pas не поможет для задач подобного рода. Как совершенно точно заметил first_aid © старшие версии Виндов не позволяют напрямую работать с аппарвтными портами. Нужно искать что-то типа

www.google.com + "Как написать драйвер на Delphi"

Хотя в ранних версиях Виндов очень помогали ассемблерные вставки.


 
promelectronika   (2003-09-11 16:40) [13]

меня интересует все же эта часть кода:

...
float f;
void main()
{
unsigned char *cc, mm[7];
...
...
cc = (unsigned char *)&f ;
for(i = 1 ; i <=4 ; i++)
*cc++ = mm[i] ;
printf("%.2f", f) ;

за ранее благодарен. Олег


 
Verg ©   (2003-09-11 16:53) [14]

Ну что?

var f : single;

procedure main;
var cc: pchar;
mm : array[0..6] of byte; // Там кстати ошибка в цикле - там надо i<=6
begin
....
сс := pchar(@mm);
for i:=1 to 4 do
begin
cc^:=chr(mm[I]);
inc(cc);
end;
write(f);
...
end;


 
Verg ©   (2003-09-11 16:54) [15]


> сс := pchar(@mm);


Тьфу ты!
сс := pchar(@f);


 
icWasya ©   (2003-09-11 17:03) [16]

PROGRAM cool;
var
mm : array[0..6] of Byte;
f : single;
c : array[0..3] of Byte absolute f;

begin
port_init(0,207);
Write(" Сумма=");
sport(0,84);// T
delay(100);
sport(0,48);// 0
delay(100);
sport(0,70);// F
for i:= 0 to 6 do
mm[i] := rport(0);
sleep(1000);

for i:= 0 to 3 do
write( HexToStr(mm[i]));

/* ПРЕОБРАЗОВАНИЕ ПРИНЯТЫХ ДАННЫХ В ФОРМАТ "FLOAT" */

for i:= 0 to 3 do
c[i] := mm[i] ; // возможно надо c[3-i] := mm[i]

write( " ", f ) ;
end.


 
promelectronika   (2003-09-17 09:56) [17]

Спасибо!
Решение найдено.



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

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

Наверх




Память: 0.5 MB
Время: 0.017 c
1-96251
Armageddon
2003-09-17 15:56
2003.09.29
распознавания текста


14-96382
cyborg
2003-09-11 17:57
2003.09.29
Как у FreePascal-я передаются параметры функции?


3-96154
ДмирийК
2003-09-08 09:14
2003.09.29
Отчеты в Rave


1-96282
P0tia
2003-09-16 22:15
2003.09.29
Почему не работает


1-96186
Vinter
2003-09-16 09:46
2003.09.29
компоненты для кодирования и раскодирования