Jump to content

Pascal Bindings


Recommended Posts

  • Replies 68
  • Created
  • Letzte Antwort

Top Posters In This Topic

Top Posters In This Topic

Posted Images

Tüchtig, tüchtig das ist der gesamte TF-Framework !

Werde es durch meinen Delphi 7 Compiler jagen, und berichten.

Wozu 2x die Semaphore Unit ?

 

Ich hatte erst TSemaphore in Semaphore.pas, da aber Delphi selber schon eine TSemaphore in SyncObjs hat musst eich das umbenennen und hab beim zusammenkopieren der Dateien die alte Datei vergessen zu löschen.

 

Ich kann hier die Delphi TSemaphore nicht verwenden, da ich die mit Timeout acquiren können muss und dass kann die Delphi TSemaphore nicht. Daher meine eigene Implementierung dafür.

 

Hmmh, zumindest die Brick-Klassen lassen sich so nicht ableiten.

 

Richtig, das hatte ich zugesagt aber dann gestern Abend vergessen. Werde das noch hinzufügen. Dafür muss ich so virtual anhängen wenn ich es richtig verstehe.

 

procedure BacklightOn; virtual;

Link zu diesem Kommentar
Share on other sites

Also, ich kann das ganze Problemlos, nach leichten Anpassungen; Ich hatte kein 24X16 LCD sondern ein 20X4, danach lief es Problemlos. Toll. Ich ich finde, man sollte so wenig Units wie möglich haben, sonst hat man eine recht lange uses Liste.

Ich werde es mir heute oder morgen noch mal genauer anschauen. Auf den ersten Blick ist es aber Toll.

Link zu diesem Kommentar
Share on other sites

Richtig, das hatte ich zugesagt aber dann gestern Abend vergessen. Werde das noch hinzufügen. Dafür muss ich so virtual anhängen wenn ich es richtig verstehe.

Methoden, Attribute und Eigenschaften die vererbt werden sollen, müssen in protected bzw. public deklariert sein, durch das Schlüsselwort virtual sind Methoden im Nachfahr überschreibbar (mit override)

 

Kann ich tun, aber welchen Vorteil bringt das?

Zwecks Übersichtlichkeit, kompakte Units etc., Konform zum Design des TF-Frameworks in Java.

Nicht nur in Delphi halte ich mich meist nach 1 Klasse = 1 Unit/Datei

 

Link zu diesem Kommentar
Share on other sites

Ich habe das ganze mal eben unter Lazarus getestet:

Ich musste erst mal "PositionCB(const position: smallint);"  in ändern:

"PositionCB(const aposition: smallint);"

Ich weiß noch nicht warum, die Anwendung stürzt ab, wenn ich den Wert in ein Label schreibe.

 

edit01: Außerdem reagiert die Anwendung auf die Maus. D.H. Die Callback Methode wird auch aufgerufen, wenn ich die Mausbewege.

Muss ich mir noch näher anschauen.

 

edit02: Das hier kommt dann:

 WARNING: TGtk2WidgetSet.InvalidateRect refused invalidating during paint message: TForm1
WARNING: TGtk2WidgetSet.InvalidateRect refused invalidating during paint message: TForm1
ERROR in LCL: TGtk2WidgetSet.DeleteObject invalid GdiObject=140737353569856
Creating gdb catchable error:

  $000000000056F0D5 line 676 of lazloggerbase.pas
  $0000000000539B96 line 1406 of lclproc.pas
  $0000000000537B2B line 864 of lclproc.pas
  $000000000063C971 line 1951 of gtk2winapi.inc
  $000000000063C8B4 line 1976 of gtk2winapi.inc
  $000000000064A3EE line 7527 of gtk2winapi.inc
  $00000000006146FD line 776 of include/winapi.inc
  $0000000000667D72 line 123 of include/controlcanvas.inc
  $0000000000694209 line 104 of include/graphiccontrol.inc

 

edit03: Es lag wohl an der AutoSize Eigenschaft vom Label.

Link zu diesem Kommentar
Share on other sites

"Überkreuzender Bezug zweier Units": Delphi ist in dieser Hinsicht sehr pingelig, was eig. richtig ist, da die Klassen bidirektional verknüpft sind. Mit dem Hack über TObject und dem späten Casten auf IPConnection kann man das aber umgehen. Ich arbeite damit seit einigen Monaten, und zwar problemlos.

 

Meldet der Compiler Fehler bei

PositionCB(const position: smallint)
?
Link zu diesem Kommentar
Share on other sites

Ich habe das ganze mal eben unter Lazarus getestet:

Ich musste erst mal "PositionCB(const position: smallint);"  in ändern:

"PositionCB(const aposition: smallint);"

Ich weiß noch nicht warum, die Anwendung stürzt ab, wenn ich den Wert in ein Label schreibe.

 

Callbacks werden von einem eigenen Callback Thread ausgeführt. Darfst du von einem nicht-GUI Thread mit dem GUI interagieren?

Link zu diesem Kommentar
Share on other sites

Ich habe heute ein kleines Beispiel mit Lazarus erstellt. Im Prinzip eine sehr einfache Version vom BrickV.

Im Anhang erst einmal ein Bild davon.

Die Panels werden Sichtbar, wenn bestimmte Bricklets gefunden wurden. Ich habe erst mal die eingebaut, die mir vorliegen. Sobald es fertig ist, lade ich das Beispiel mit einigen Hinweisen hoch.

 

Toll wäre jetzt natürlich noch, wenn der Masterbrick Automatisch ein Callback liefern würde, wenn ich ein Bricklet Anschließe oder entferne...

bild1.png.188e142fd35e81611fb99a7a0441bb09.png

Link zu diesem Kommentar
Share on other sites

Was mir noch aufgefallen ist: Wenn ich eine Verbindung zum BrickD habe, über die Pascal Bindings, und dann die Verbindung Trenne, kommt es zu einem Fehler, dass Programm verabschiedet sich. Schön, wäre, wenn man das Abfangen könnte.

 

edit01: Ich weiß noch nicht genau, warum aber das Poti scheint ein "Event" auszulösen, obwohl ich den Dreh Knopf gar nicht betätige. Der Wert Schwankt. Zuerst dachte, es liegt am Kabel, scheint aber nicht der Fall zu sein.Alles liegt gerade auf dem Tisch.

 

edit02: Ich glaube inzwischen, dass es nur am Anfang auftritt, wenn ich den Master Brick anschließe.

 

edit03: Lustig, wenn ich die Hintergrund Beleuchtung beim LCD recht schnell hintereinander an und aus schalte, ändert sich der Wert vom Enteferungs Messer.

 

edit04: Wenn die Hintergrund Beleuchtung an ist beim LCD, ist der Wert vom Entferungs Messer Stabil, schalte ich sie aus, ändert sich der Wert, obwohl ich den Sensor gar nicht bewegt habe.

 

ps: Wenn ihr eine Oberfläche erstellt, wo alle Sensoren auf einmal zu sehen sind, so wie bei mir, könnt ihr diese Fehler besser Nachvollziehen.

 

Link zu diesem Kommentar
Share on other sites

Die Hintergrundbeleuchtung vom LCD und der Distance IR Sensor werden über die 5V vom PC betrieben. Dein PC liefert weniger Spannung wenn du den Strom erhöhst (Das gilt leider auch für die USB Power Supply bei uns im Shop und für alle anderen billigen "USB Ladegeräte"). Das kannst du nur mit einer Step-Down Power Supply umgehen.

Link zu diesem Kommentar
Share on other sites

Was mir noch aufgefallen ist: Wenn ich eine Verbindung zum BrickD habe, über die Pascal Bindings, und dann die Verbindung Trenne, kommt es zu einem Fehler, dass Programm verabschiedet sich. Schön, wäre, wenn man das Abfangen könnte.

 

Wie und welche Verbinding trennst du und wie sieht der Fehler bzw die Meldung aus?

Link zu diesem Kommentar
Share on other sites

Wie und welche Verbinding trennst du und wie sieht der Fehler bzw die Meldung aus?

Wenn ich die USB Verbindung trenne. Obwohl ich noch eine Verbindung zum BrickD habe. Hier ein Auszug daraus:

Wenn ich mir die Fehler Meldungen anschaue, scheint es an der LibC zu liegen.

Ich vermute,die Verbindung wird nicht sauber beendet oder?

 

  *** glibc detected *** /mnt/sda5/daten/Michael/entwicklung/Lazarus/tinkforge/test04/project1: double free or corruption (fasttop): 0x0000000000de5b10 ***

======= Backtrace: =========

/lib/x86_64-linux-gnu/libc.so.6(+0x7e626)[0x7ffff57c7626]

/usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0(gdk_region_union+0x97)[0x7ffff6bacc47]

/usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0(+0x3d797)[0x7ffff6bb6797]

/usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0(+0x3d6e8)[0x7ffff6bb66e8]

/usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0(+0x3d943)[0x7ffff6bb6943]

/usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0(gtk_widget_queue_draw_area+0x19a)[0x7ffff707cd2a]

/usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0(gtk_widget_queue_draw+0x73)[0x7ffff7083e53]

/mnt/sda5/daten/Michael/entwicklung/Lazarus/tinkforge/test04/project1[0x7d0309]

======= Memory map: ========

00400000-007eb000 r-xp 00000000 08:05 22549306                          /mnt/sda5/daten/Michael/entwicklung/Lazarus/tinkforge/test04/project1

009eb000-00bd1000 rw-p 003eb000 08:05 22549306                          /mnt/sda5/daten/Michael/entwicklung/Lazarus/tinkforge/test04/project1

00bd1000-00df9000 rw-p 00000000 00:00 0                                  [heap]

7fffd8000000-7fffd8021000 rw-p 00000000 00:00 0

7fffd8021000-7fffdc000000 ---p 00000000 00:00 0

7fffe0000000-7fffe0022000 rw-p 00000000 00:00 0

7fffe0022000-7fffe4000000 ---p 00000000 00:00 0

7fffe4000000-7fffe4021000 rw-p 00000000 00:00 0

7fffe4021000-7fffe8000000 ---p 00000000 00:00 0

7fffe8000000-7fffe8022000 rw-p 00000000 00:00 0

7fffe8022000-7fffec000000 ---p 00000000 00:00 0

7fffed213000-7fffed228000 r-xp 00000000 08:02 527874                    /lib/x86_64-linux-gnu/libgcc_s.so.1

7fffed228000-7fffed427000 ---p 00015000 08:02 527874                    /lib/x86_64-linux-gnu/libgcc_s.so.1

7fffed427000-7fffed428000 r--p 00014000 08:02 527874                    /lib/x86_64-linux-gnu/libgcc_s.so.1

7fffed428000-7fffed429000 rw-p 00015000 08:02 527874                    /lib/x86_64-linux-gnu/libgcc_s.so.1

7fffed444000-7fffed4dd000 rw-p 00000000 00:00 0

7fffed4dd000-7fffed4de000 ---p 00000000 00:00 0

7fffed4de000-7fffed8de000 rw-p 00000000 00:00 0

7fffed8de000-7fffed8df000 ---p 00000000 00:00 0

7fffed8df000-7fffedcdf000 rw-p 00000000 00:00 0

7fffedcdf000-7fffedd84000 r--p 00000000 08:02 393692                    /usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf

7fffedd84000-7fffedd90000 r-xp 00000000 08:02 527798                    /lib/x86_64-linux-gnu/libudev.so.0.13.0

7fffedd90000-7fffedf8f000 ---p 0000c000 08:02 527798                    /lib/x86_64-linux-gnu/libudev.so.0.13.0

7fffedf8f000-7fffedf90000 r--p 0000b000 08:02 527798                    /lib/x86_64-linux-gnu/libudev.so.0.13.0

7fffedf90000-7fffedf91000 rw-p 0000c000 08:02 527798                    /lib/x8

 

Ich habe jetzt mal das Netzteil  vom USB Hub angeschlossen, die Werte, die von den Sensoren kommen, scheinen Stabiler zu sein. Werde ich mal weiterhin beobachten.

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.


×
×
  • Neu erstellen...