pluto Geschrieben July 10, 2012 at 19:20 Autor Geschrieben July 10, 2012 at 19:20 Aber dann gebe es die Typen Doppelt, wie umgehst du das? Extra Unit? Keine Standard Units verwenden, wenn möglich? Zitieren
Nic Geschrieben July 10, 2012 at 19:25 Geschrieben July 10, 2012 at 19:25 Wieso doppelt ? In meinen Delphi Bindings nenne ich es TBaseArray und nicht TByteArray. Die wichtigsten Typen, die in allen Klassen verwendet werden, kommen in eine eigene Unit BaseData.BaseData.pas Zitieren
pluto Geschrieben July 10, 2012 at 20:04 Autor Geschrieben July 10, 2012 at 20:04 In meinen Delphi Bindings nenne ich es TBaseArray und nicht TByteArray. Aber wer kommt bei TBaseArray darauf das es ein TByteArray ist? Zitieren
Nic Geschrieben July 11, 2012 at 09:38 Geschrieben July 11, 2012 at 09:38 TBaseArray = array of byte; Worauf willst Du eigentlich hinaus ? Zitieren
pluto Geschrieben July 11, 2012 at 17:13 Autor Geschrieben July 11, 2012 at 17:13 Sagen wir es so: Aus den Namen TBaseArray ist nicht erkennbar, dass es sich um ein Array of Byte handelt. Erst wenn man sich die Deklaration davon anschaut, weißt man es. Aber ich glaube die Unterhaltung führt zu nichts.... Zitieren
photron Geschrieben July 11, 2012 at 20:29 Geschrieben July 11, 2012 at 20:29 Hier nun Preview 2. Dies sind die fertig generierten Bindings.delphi_preview2.zip Zitieren
Nic Geschrieben July 12, 2012 at 09:29 Geschrieben July 12, 2012 at 09:29 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 ? Hmmh, zumindest die Brick-Klassen lassen sich so nicht ableiten. Zitieren
Nic Geschrieben July 12, 2012 at 10:56 Geschrieben July 12, 2012 at 10:56 In D7 lässt sich das problemlos compilieren ! Ev. die Device-Klasse noch ausgelagert in eigene Unit.ipconnection.pasDevice.pas Zitieren
photron Geschrieben July 12, 2012 at 12:24 Geschrieben July 12, 2012 at 12:24 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; Zitieren
photron Geschrieben July 12, 2012 at 12:27 Geschrieben July 12, 2012 at 12:27 In D7 lässt sich das problemlos compilieren ! Ich hatte das hier mit Embarcadero Delphi XE2 getestet. Ev. die Device-Klasse noch ausgelagert in eigene Unit. Kann ich tun, aber welchen Vorteil bringt das? Zitieren
pluto Geschrieben July 12, 2012 at 13:47 Autor Geschrieben July 12, 2012 at 13:47 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. Zitieren
photron Geschrieben July 12, 2012 at 14:01 Geschrieben July 12, 2012 at 14:01 Ich ich finde, man sollte so wenig Units wie möglich haben, sonst hat man eine recht lange uses Liste. Die Device Klasse auslagern in eine eigene Unit ist nicht extern sichtbar. Als Benutzer der Bindings brauchst du IPConnection und die Unit für das jeweilige Brick oder Bricklet, der Rest ist intern. Zitieren
Nic Geschrieben July 12, 2012 at 14:15 Geschrieben July 12, 2012 at 14:15 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 Zitieren
pluto Geschrieben July 12, 2012 at 15:53 Autor Geschrieben July 12, 2012 at 15:53 Nicht nur in Delphi halte ich mich meist nach 1 Klasse = 1 Unit/Datei Das kann aber auch Probleme bereiten. "Überkreuzer Unit" Aufruf z.b. Ich versuche die Klassen möglich logisch in verschiedene Units zu packen. Da können auch schon mal drei oder vier Klassen drin sein. Zitieren
pluto Geschrieben July 12, 2012 at 16:01 Autor Geschrieben July 12, 2012 at 16:01 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. Zitieren
Nic Geschrieben July 12, 2012 at 16:06 Geschrieben July 12, 2012 at 16:06 "Ü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) ? Zitieren
photron Geschrieben July 12, 2012 at 16:17 Geschrieben July 12, 2012 at 16:17 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? Zitieren
pluto Geschrieben July 12, 2012 at 16:19 Autor Geschrieben July 12, 2012 at 16:19 Callbacks werden von einem eigenen Callback Thread ausgeführt. Darfst du von einem nicht-GUI Thread mit dem GUI interagieren? ja. das Problem war: Doppelter Bezeichner. Position wird schon in TForm verwendet. Daher. Aber jetzt geht es Problemlos. Zitieren
pluto Geschrieben July 12, 2012 at 16:21 Autor Geschrieben July 12, 2012 at 16:21 Irgendetwas scheint noch nicht rund zu laufen. Das Callback wird immer ausgeführt. Auch dann, wenn ich kein Knopf Drehe beim "Rotary Poti"; Edit01: Komisch, scheint nicht immer der Fall zu sein, ich werde es mal beobachten. Vielleicht war es auch ein Wackelkontakt am Masterbrick oder so.... Zitieren
pluto Geschrieben July 14, 2012 at 13:38 Autor Geschrieben July 14, 2012 at 13:38 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... Zitieren
pluto Geschrieben July 15, 2012 at 11:07 Autor Geschrieben July 15, 2012 at 11:07 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. Zitieren
borg Geschrieben July 15, 2012 at 12:52 Geschrieben July 15, 2012 at 12:52 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. Zitieren
pluto Geschrieben July 15, 2012 at 13:50 Autor Geschrieben July 15, 2012 at 13:50 Schade.Ich dachte das wäre eine Software Problem... Das hätte man leichter lösen können. Ist aber auch nicht so wichtig... Hauptsache es läuft... Ich habe ein USB-Hub dazwischen von D-Link. Müsste ich da mal das Netz-Teil anschließen? Zitieren
photron Geschrieben July 16, 2012 at 11:15 Geschrieben July 16, 2012 at 11:15 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? Zitieren
pluto Geschrieben July 16, 2012 at 16:33 Autor Geschrieben July 16, 2012 at 16:33 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. Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.