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

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
_Bernd
Beiträge: 145
Registriert: Di 13. Feb 2007, 11:16

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

Beitrag von _Bernd »

Fish-Hunter hat geschrieben: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...
Bit 7 (Busy an Pin 11) des Ports $379 wird ausmaskiert und auf 1 getestet.
Fish-Hunter hat geschrieben: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?
schwer zu sagen. Möglicherweise liegt Dein Parallelport nicht auf $378. $278 und $3bc sind noch gängig. Sollte es dann immer noch nicht gehen, bin ich mit meinem Latein eigentlich auch am Ende.

Gruß, Bernd.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6763
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

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

Beitrag von af0815 »

[quote="_Berndschwer zu sagen. Möglicherweise liegt Dein Parallelport nicht auf $378. $278 und $3bc sind noch gängig.[/quote]
Ev. mal ins BIOS sehen, als was der Port konfiguriert ist. Damit sollte zumindest der Port ersichtlich werden.

Weiters gibt es die verschiedensten Modi in dem der Port laufen kann, Stichwort SPP-EPP-ECP. Im Zweifelsfall mal mit SPP (Compatibler Modus) testen.

Zusätzlich mal sehen ob die Rechte auf den Portzugriff ausreichend sind, normaler User oder root ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

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

Beitrag von marcov »

1) ioperm braucht root zutritt.
2) Kein unit libc nutzen: http://wiki.freepascal.org/libc_unit" onclick="window.open(this.href);return false;
3) siehe unit x86, function fpioperm. Das ist auch portabel nach 64-bit und FreeBSD.

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 »

marcov hat geschrieben:3) siehe unit x86, function fpioperm. Das ist auch portabel nach 64-bit und FreeBSD.
kannst du mir das näher erklären?
wie setze ich diese fpioperm ein?

im bios war der menu punkt "bi-directional" eingestellt, deweiteren kann ich noch die punkte:
  • Normal Mode <== Ist momentan EIngestellt
  • Bi-Directional <== War Eingestellt
  • ECP
  • EPP
auswählen, ich habe jetzt den Normal mode eingestellt.
der port ist auf 378 eingestellt.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6763
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

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

Beitrag von af0815 »

Fish-Hunter hat geschrieben: wie setze ich diese fpioperm ein?
hier: http://community.freepascal.org:10000/b ... m_id=24082 unten ein kleines Bsp.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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, er setzt jetze keine spannung mehr auf den lpt so wie es sein sollte, als ich allerdings prüfen wollte ob ich nun auf pin 11 ein signal bekomme hat der mir mein programm zum abschmieren gebracht, das hatte ich dann danach ausprobiert:

Code: Alles auswählen

if (WritePortB($379,%10000000) and %10000000) = %10000000 then
label3.caption:='BusyIsHigh';
 
if (WritePortB($379,%00000000) and %10000000) = %00000000 then
label3.caption:='BusyIsLow';
end;
hat aber auch nicht funktioniert:

Code: Alles auswählen

unit1.pas(1025,5) Error: Incompatible types: got "untyped" expected "LongWord"
unit1.pas(1029,5) Error: Incompatible types: got "untyped" expected "LongWord"
wie kann ich das jetzt mit der writeportb methode prüfen?


€dit:

ich habe gerade noch das readport komando gefunden, habe das dann folgendermaßen probiert:

Code: Alles auswählen

if (ReadPortB($379) and %10000000) = %10000000 then
label3.caption:='BusyIsHigh';
 
if (ReadPortB($379) and %10000000) = %00000000 then
label3.caption:='BusyIsLow'
allerdings endete das dann in einem SIGSEGV :roll:

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 »

Darf ich mal grundsätzlich in Frage stellen, den paralellport für solch eine Aufgabe zu nutzen ?!
Neue Boards haben den gar nicht mehr er stirbt schon seit jahrzehnten aus.
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 »

dein einwand ist berechtigt und auch richtig, da ich das ganze aber für ein programm nutzen will das zeiten auf wettkampfbahnen stoppt, und das ganze elektronisch ablaufen soll, bastel ich dafür einen pc und da ist ein LPT dran, das programm ist sozusagen auch nur für diesen pc gedacht, es ist sozusagen egal ob das auf einem anderen system läuft ;-)

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6763
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

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

Beitrag von af0815 »

Fish-Hunter hat geschrieben:€dit:

ich habe gerade noch das readport komando gefunden, habe das dann folgendermaßen probiert:

Code: Alles auswählen

if (ReadPortB($379) and %10000000) = %10000000 then
label3.caption:='BusyIsHigh';
 
if (ReadPortB($379) and %10000000) = %00000000 then
label3.caption:='BusyIsLow'
allerdings endete das dann in einem SIGSEGV :roll:
Kannst du vielleicht ein wenig mehr an Code zeigen. Mir fehlt da zB. das fpioperm.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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 »

klar kein problem, das habe ich direkt unter implementation stehen:
Ich muss mich nocheinmal korregieren: auf pin 2 liegen immer noch 4,7 Volt an obwohl ich den pin sage das er auf low setzen soll... :|

Code: Alles auswählen

{$IFDEF Linux}
function ioperm(from: Cardinal; num: Cardinal; turn_on: Integer): Integer; cdecl; external 'libc';
 
function fpIOperm(From: Cardinal; Num: Cardinal; Value: cint):cint;
begin end;
 
 
procedure WritePortB(Port: LongInt; Value: Byte);
begin end;
 
{$ENDIF}
auf klick vom button soll er dann das entsprechende signal setzen:

Code: Alles auswählen

if(bitbtn4.color=clGreen)
then
begin
{$IFDEF Linux}
   fpIOPerm($378,3,1);
   WritePortB($378,%00000001);
{$ENDIF}
end
else
begin
{$IFDEF Linux}
   fpIOPerm($378,3,1);
   WritePortB($378,%00000000);
{$ENDIF}
end;
bzw wird beim laden des forms das hier ausgeführt:

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
{$IFDEF Linux}
   fpIOPerm($378,3,1);
   WritePortB($378,%00000000);
{$ENDIF}
end;

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

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

Beitrag von marcov »

Fish-Hunter hat geschrieben: bzw wird beim laden des forms das hier ausgeführt:

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
{$IFDEF Linux}
   fpIOPerm($378,3,1);
   WritePortB($378,%00000000);
{$ENDIF}
end;
(Man kan besser $IFDEF UNIX nutzen als $IFDEF LINUX. Es gibt nicht so viel Linux specifische sachen)

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6763
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

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

Beitrag von af0815 »

Fish-Hunter hat geschrieben:klar kein problem, das habe ich direkt unter implementation stehen:
Ich muss mich nocheinmal korregieren: auf pin 2 liegen immer noch 4,7 Volt an obwohl ich den pin sage das er auf low setzen soll... :|

Code: Alles auswählen

{$IFDEF Linux}
function ioperm(from: Cardinal; num: Cardinal; turn_on: Integer): Integer; cdecl; external 'libc';
 
function fpIOperm(From: Cardinal; Num: Cardinal; Value: cint):cint;
begin end;
 
 
procedure WritePortB(Port: LongInt; Value: Byte);
begin end;
 
{$ENDIF}
das fpIOperm und WritePortB MUSS aus den units kommen, hier darf keine Deklaration erfogen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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 jetzt die komplette ifdef linux sasche rausgenommen, compilierenn tut er es trotzdem ohne probleme, auf 4,7 volt ist der pin 2 aber immer noch. kann man den lpt noch anderweitig kontrollieren ?

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 »

Hast du deine komischen deklarationen von ioPerm auch rausgenommen ?
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 »

ja, diesen kompletten block:

Code: Alles auswählen

{$IFDEF Linux}
function ioperm(from: Cardinal; num: Cardinal; turn_on: Integer): Integer; cdecl; external 'libc';
 
function fpIOperm(From: Cardinal; Num: Cardinal; Value: cint):cint;
begin end;
 
procedure WritePortB(Port: LongInt; Value: Byte);
begin end;
{$ENDIF}
ich habe gelesen das man den lpt auch mit hilfe von zusätzlichen komponenten ansteuern kann, kennt ihr da welche für lazarus?

Antworten