![]() |
Re: Auslesen/Programmieren
Also enhält ftData nun die gewünschten Werte?
Wo ist dann das Problem?? :-)) |
Re: Auslesen/Programmieren
ja ftData enthält die werte...
aber nur dann, wenn ich das Porg öffne und das EEPROM programmiere und dann die Daten auslesen... wenn ich das Prog öffne und dann gleich auslesen will, stürzt es immer noch ab... ausser eben ich habe
Delphi-Quellcode:
nicht drin
ManufacturerBuf := ftData.Manufacturer;
ManufacturerIDBuf := ftData.ManufacturerID; DescriptionBuf := ftData.Description; SerialNumberBuf := ftData.SerialNumber; oder ich habe bei
Delphi-Quellcode:
die stringlänge nicht definiert... :gruebel:
ManufacturerBuf : string;
ManufacturerIDBuf : string; DescriptionBuf : string; SerialNumberBuf : string; dann aber zeigt es mir die Werte von
Delphi-Quellcode:
nicht an, sonder nur die ftData-Werte, die Boolean oder Word sind!
ftData.Manufacturer, ftData.ManufacturerID, ftData.Description, ftData.SerialNumber
die PChar-Werte zeigt es dann nicht an! Der Sinn der ganze Sache wäre, dass man div. Devices anschliessen kann und dann alle Daten wie Serienummer, Beschreibung, usw. auslesen kann. :| |
Re: Auslesen/Programmieren
Die Stringlänge spielt ja auch keine Rolle, da in ftData sowieso nur Zeiger auf NULL-Terminierte Zeichenketten sind.
Ich hab im Web folgende Doku gefunden: ![]() Die Funktion zum lesen der Daten hab ich mal nach Delphi übersetzt, vielleicht hilft's ja weiter. Das Hinweisfenster ist natürlich nur ein Test und sollte eigentlich etwas anzeigen. Ich vermute Du hast die Funktion FT_Open noch nicht aufgerufen wenn das Prog startet!?
Delphi-Quellcode:
var
ftHandle : FT_HANDLE; ftData : FT_PROGRAM_DATA; ftstatus : FT_STATUS; begin ftStatus = FT_Open(0, @ftHandle); if ftStatus = FT_OK then begin ftstatus := FT_EE_Read(ftHandle, @ftData); if ftstatus FT_OK then begin // FT_EE_Read OK, data is available in ftData // in ftData müssten nun alle Daten enthalten sein !! showmessage(ftData.Manufacturer); end else FT_Error_Report('FT_EE_Read', ftstatus); end; end; |
Re: Auslesen/Programmieren
ja die Doku hab ich auch...
aber beim Hinweisfenster zeigt es mir nichts an ausser eben ich programmiere es zuerst... aber das ist ja schon bekannt... ist den das hier nicht mehr nötig?
Delphi-Quellcode:
es ist doch seltsam, dass die boolean und word werte ohne probleme ausgelsen werden können, bei den PChar aber solche probleme auftreten... :?:
ManufacturerBuf := ftData.Manufacturer;
ManufacturerIDBuf := ftData.ManufacturerID; DescriptionBuf := ftData.Description; SerialNumberBuf := ftData.SerialNumber; langsam ist es zum :kotz: Danke dir mal jedenfalls für die ganzen Tips bis jetzt! :thuimb: hoffe wir finden dass noch raus... PEACE STW |
Re: Auslesen/Programmieren
Die sind so eigentlich nicht nötig.
Stimmen die anderen Werte wirklich oder sind es Zufallswerte? Wird die Proc von mir korrekt durchlaufen, FT_OK , FT_EE_Read, gültiges Handle.. ..also bis zum Fenster? Was erscheint wenn Du einen Breakpoint in die Zeile von "Showmessage()" reinsetzt und mit dem Mauszeiger auf ftData gehst? Es müsste eigentlich der gesammte Inhalt als Hinweisfenster angezeigt werden. Nur nicht aufgeben :-) |
Re: Auslesen/Programmieren
Also wenn ich das Prog öffne und das mache, zeigt es mir im Debug Inspector alle Werte von ftData...
ausser die PChar Werte ... :? Bei denen steht nil... wenn ich zuerst programmiere und dann auslese sind alle Werte vorhanden... jap, deine proc stimmt... |
Re: Auslesen/Programmieren
Also einen hab ich noch:-)
Delphi-Quellcode:
Ich vermute mal das es auch am zuweisen des Speichers liegen kann?!
var
ftHandle : FT_HANDLE; ftData : PFT_PROGRAM_DATA; ftstatus : FT_STATUS; begin ftStatus = FT_Open(0, @ftHandle); if ftStatus = FT_OK then begin GetMem(ftData, SizeOf(FT_PROGRAM_DATA)); ftstatus := FT_EE_Read(ftHandle, ftData); if ftstatus FT_OK then begin // FT_EE_Read OK, data is available in ftData // in ftData müssten nun alle Daten enthalten sein !! end else FT_Error_Report('FT_EE_Read', ftstatus); FreeMem(ftData); end; end; |
Re: Auslesen/Programmieren
Guck nochmal bei dem C-Code, da sind die vier Zeilen anders herum:
Delphi-Quellcode:
Function ReadEE : FT_Result;
var ManufacturerBuf : string[32]; ManufacturerIDBuf : string[16]; DescriptionBuf : string[64]; SerialNumberBuf : string[16]; begin ftData.Manufacturer := @ManufacturerBuf[1]; // Die ftData.ManufacturerID := @ManufacturerIDBuf[1]; // vier ftData.Description := @DescriptionBuf[1]; // meine ftData.SerialNumber := @SerialNumberBuf[1]; // ich Result := FT_EE_Read(Multi_Handle,@FtData); if Result <> FT_OK then FT_Error_Report('FT_EE_Read',Result); end; |
Re: Auslesen/Programmieren
Falls die Strukturen aus C/C++ stammen so hast du die Strings falsch transliert.
Statt
Delphi-Quellcode:
mußtype XYZ = record XYZ: String[48]; end;
Delphi-Quellcode:
werden.
type
XYZ = record XYZ: array[0..48 -1] of Char; end; Gruß Hagen |
Re: Auslesen/Programmieren
Morgen allerseits...
@s14 Das getMem funktioniert nicht so... es kommt die Meldung incompatible Types in der DelphiHelp steht da, dass es einen Pointer und Integer sein muss... FT_PROGRAM_DATA ist ja aber ein record... @scp ich glaube in C und Delphi ist das doch eben gerade seitenverkehrt... oder irre ich mich da? @negaH ich habe für die strings auch PChar genommen also:
Delphi-Quellcode:
und wenn ichs so mache wie dein Vorschlag (also Arrays), kann ich beim EEPROM programmieren die Daten nicht mehr ins ftData einschreiben, da ich sie von Edits herauslese
type
XYZ = record XZW: PChar; end; also:
Delphi-Quellcode:
hmmmm.... :gruebel:
ftData.Manufacturer := PChar(Manufacturer.Text);
PEACE STW |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz