Can't find unit glibc & Identifier not found "Port"

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Fish-Hunter
Beiträge: 15
Registriert: Do 4. Sep 2008, 11:43

Can't find unit glibc & Identifier not found "Port"

Beitrag von Fish-Hunter »

Hallo,
ich möchte auf diverse LPT Pins zugreifen, unter Lazarus / Hardwareaccess ist ein weg beschrieben den ich auch probiert habe, allerdings findet er dann erstmal die unit glibc nicht. daraufhin habe ich diese versucht raus zu nehmen und habe versucht das ganze zu compilieren, da kam dann der Fehler das er den identifier "port" nicht findet.

hier noch ein wenig Quelltext:

unit1:

Code: Alles auswählen

................................
uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ComCtrls,
  DBGrids, StdCtrls, Buttons, Menus, DbCtrls, ExtCtrls, process, LCLIntf, crt;
 
implementation
 
{ TForm1 }
 
{$IFDEF Linux}
function ioperm(from: Cardinal; num: Cardinal; turn_on: Integer): Integer; cdecl; external 'libc';
{$ENDIF}
 
............
 
{$IFDEF Linux}
  i := ioperm($378, 8, 1);
  port[$378] := $00;
  label4.Caption := 'ioperm: ' + IntToStr(i);
  i := Integer(port[$378]);
  label4.Caption := 'response: ' + IntToStr(i);
{$ENDIF}
..................................


project1.lpi:

Code: Alles auswählen

..............
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Forms, unit1, ports;
...................


wie kann ich die einzelnen pins des lpt steuern, bzw auch noch abhorchen, also darauf warten bis das Signal von Pin 3 auf Pin 10 ankommt?
Bild

Lazarus habe ich auf einem Xubuntu 8.04 aufgesetzt, als ich nach einer Lösung für das glibc Problem gesucht hatte wurde in mehreren Foren gesagt das man da unter Ubuntu die libc6-dev installieren soll, die ist bei mir aber schon installiert.

Thx4Hlp :roll:

danke für das verschieben ;-)
Zuletzt geändert von monta am Do 4. Sep 2008, 12:29, insgesamt 1-mal geändert.
Grund: Verschoben, hat nichts mit der IDE zu tun

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Can't find unit glibc & Identifier not found "Port"

Beitrag von Christian »

Wiso nutzt du nicth den vorgeschlagenen weg über ioperm das ist wenigstens zukunftssicher. Wobei zukunftssicher und LPT ...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Fish-Hunter
Beiträge: 15
Registriert: Do 4. Sep 2008, 11:43

Re: Can't find unit glibc & Identifier not found "Port"

Beitrag von Fish-Hunter »

Versuche ich ja, aber ich weis nicht warum es nicht klappt :-(

Oder wie meinst du das sonnst? muss ich die ioperm noch irgendwo mit einbinden oder wie soll das funktionieren?

ein bsp wäre schön :|

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Can't find unit glibc & Identifier not found "Port"

Beitrag von Christian »

Fish-Hunter hat geschrieben:muss ich die ioperm noch irgendwo mit einbinden oder wie soll das funktionieren?
ein bsp wäre schön :|


Wiso nimmst du nicht einfach das Beispiel aus der Wiki ??

http://wiki.freepascal.org/Hardware_Access#Using_ioperm_to_access_ports_on_Linux
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Fish-Hunter
Beiträge: 15
Registriert: Do 4. Sep 2008, 11:43

Re: Can't find unit glibc & Identifier not found "Port"

Beitrag von Fish-Hunter »

das habe ich, das ist ja auch oben im quelltext zu sehen, nur geht es nicht, lazarus hort auf zu compilieren und bricht mit der fehlermeldung ab dads er die glibc nicht findet.

edit:

ich habe es nocheinmal mit der unit libc probiert:

Code: Alles auswählen

unit1.pas(1,1) Fatal: Can't find unit libc used by Unit1

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Can't find unit glibc & Identifier not found "Port"

Beitrag von Christian »

Ach ja sorry.
libc gibts nur auf 32 bit systemen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Fish-Hunter
Beiträge: 15
Registriert: Do 4. Sep 2008, 11:43

Re: Can't find unit glibc & Identifier not found "Port"

Beitrag von Fish-Hunter »

hmm, komisch, ich habe hier die 32 bit version, aber warum funktioniert das nicht?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Can't find unit glibc & Identifier not found "Port"

Beitrag von Christian »

in der aktuellen svn version mitm fpc 2.2.2 oder 2.2.3 findet er die libc auf jeden fall.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Fish-Hunter
Beiträge: 15
Registriert: Do 4. Sep 2008, 11:43

Re: Can't find unit glibc & Identifier not found "Port"

Beitrag von Fish-Hunter »

ok, dann versuch ich mal die svn version zu installieren...

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Can't find unit glibc & Identifier not found "Port"

Beitrag von Christian »

nee, nicht das fpc svn installieren. das ist oft recht experimeltell. nimm einfach die aktuelle stable.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Fish-Hunter
Beiträge: 15
Registriert: Do 4. Sep 2008, 11:43

Re: Can't find unit glibc & Identifier not found "Port"

Beitrag von Fish-Hunter »

also, nachdem nu das wochenende rum ist, habe ich mir die ubuntu version mit vorinstalliertem lazarus gezogen, libc funktioniert jetzt soweit, er kann die unit also laden.

kommen wir weiter:

Code: Alles auswählen

{$IFDEF Linux}
  i := ioperm($220, 8, 1);
  port[$220] := $00;
  label6.Caption := 'ioperm: ' + IntToStr(i);
  i := Integer(port[$220]);
  label7.Caption := 'response: ' + IntToStr(i);
{$ENDIF}


in diesen zeilen bringt mir lazarus beim compilen folgende fehler:

Code: Alles auswählen

unit1.pas(181,7) Error: Identifier not found "port"
unit1.pas(183,20) Error: Identifier not found "port"
unit1.pas(301) Fatal: There were 2 errors compiling module, stopping


woran kann das liegen?

liege ich richtig in der annahme, das wenn ich den lpt port steuern will, die port variablen auf $378 ändern muss?

_Bernd
Beiträge: 145
Registriert: Di 13. Feb 2007, 11:16

Re: Can't find unit glibc & Identifier not found "Port"

Beitrag von _Bernd »

sieht eher so aus, als ob die Unit ports nicht eingebunden ist.

Gruß, Bernd.

Fish-Hunter
Beiträge: 15
Registriert: Do 4. Sep 2008, 11:43

Re: Can't find unit glibc & Identifier not found "Port"

Beitrag von Fish-Hunter »

ok, ich habe die unit ports fälschlicherweise im project1.lpr unter uses eingetragen, nun läuft das port kommando,
eine frage hätte ich noch, wenn ich nun abfragen mit if machen will ob auf dem pin 10 oder 11 (input) das signal von pin 2 ankommt, wie mache ich das da? bzw wie lege ich ein signal auf den pin 2 das ich dann wiederum auf den pins 10 / 11 abfragen kann?

mfg
Fish-Hunter

_Bernd
Beiträge: 145
Registriert: Di 13. Feb 2007, 11:16

Re: Can't find unit glibc & Identifier not found "Port"

Beitrag von _Bernd »

Code: Alles auswählen

port[$378]:= %00000001;   { Data 0 high, Data 1 bis Data 7 low }
   port[$378]:= %00000000;   { Data 0 bis Data 7 low }
 
   if (port[$379] and %10000000) = %10000000 then
      BusyIsHigh;
 
   if (port[$379] and %10000000) = %00000000 then
      BusyIsLow;
 
   if (port[$379] and %01000000) = %01000000 then
      AckIsHigh;
 
   if (port[$379] and %01000000) = %00000000 then
      AckIsLow;


Details zur parallelen Schnittstelle gibt es hier:
http://www.beyondlogic.org/spp/parallel.htm

Gruß, Bernd.

Fish-Hunter
Beiträge: 15
Registriert: Do 4. Sep 2008, 11:43

Re: Can't find unit glibc & Identifier not found "Port"

Beitrag von Fish-Hunter »

Hallo,
danke für deine antwort bernd, könntest du mir bitte näher erklären wie das mit der if funktioniert also was das

Code: Alles auswählen

(port[$379] and %10000000) = %10000000

bedeutet? wenn ich in der if ein label auf caption:='high'; setze macht er das schon ohne das ich pin 2 und 11 oder 10 verbinde...

leider setzt er mir auch die data pins 0-7 nicht auf low wenn ich

Code: Alles auswählen

port[$378]:= %00000000;

ausführe, warum? mache ich etwas falsch?

Antworten