Seite 1 von 1
ILDA Parser
Verfasst: Mo 29 Nov, 2021 5:21 pm
von Kitti
Hallo zusammen,
möchte folgendes realisieren: Eine vorhandene ILDA-Datei mit einem C# Programm auslesen. Problem: der notwendige "ILDA-Parser" fehlt mir. Könnte mir eventuell einer helfen, oder eine gute Internetseite vorschlagen, wo ich den ILDA-Standard erblicken kann. Wenn ich nämlich eine ILDA-Datei mit dem Texteditor öffne, kommen nur komische Ziffern und ich kann nichts erkennen.
Bitte um kurze Rückmeldungen!
MfG
Tobias
Re: ILDA Parser
Verfasst: Mo 29 Nov, 2021 9:16 pm
von lightwave
Re: ILDA Parser
Verfasst: Sa 04 Dez, 2021 1:18 pm
von random
Du warst doch auch schon um µC Forum unterwegs, hast mittlerweile genug Tipps zusammen? Schon erste Ergebnisse?
Re: ILDA Parser
Verfasst: Do 09 Dez, 2021 10:57 pm
von tkaulen
Suche einfach nach dem JAVA Package nl.sijpesteijn.ilda . Dann hast Du genau was Du benötigst
Musst natürlich dann noch den JAVA Code nach C# umschreiben, obwohl dafür gibt es auch Converter.
VG
Thomas
Re: ILDA Parser
Verfasst: Fr 10 Dez, 2021 9:57 am
von random
tkaulen hat geschrieben: ↑Do 09 Dez, 2021 10:57 pm
Suche einfach nach dem JAVA Package nl.sijpesteijn.ilda . Dann hast Du genau was Du benötigst
Oh backe, was ein Monster. In C ist das wesentlich einfacher.
Ich empfehle, das ILDA Format in nested struct/union Schablonen zu verpacken, sind nur ne Hand voll Zeilen. Der Streamreader buffert immer vielfache der ILDA Pakete, und castet die Schablonen auf den Readpointer. Dann einfach die Member auslesen. Klingt kompliziert, ist aber supereinfach, und man spart sich das byteweise Durchgehen.
Vor allem braucht man überhaupt kein malloc/new, was die Sache effizient macht. So nen ILDA reader bekommt man - gut lesbar - auf 200 Zeilen code plus 100 Zeilen für die Schablonen.
Tipp (einfach so runtergeschrieben aus dem ILDA Manual):
Code: Alles auswählen
typedef _PACKED struct { // 1..32
_PACKED union {
unsigned char buf[32]; // 32 byte
_PACKED struct {
_PACKED union {
char key[4]; // 1..4 "ILDA"
unsigned int keyNum;
_PACKED struct {
char key1;
char key2;
char key3;
char key4;
};
};
char ZERO0; // 5
char ZERO1; // 6
char ZERO2; // 7
char formatCode; // 8 Format Code
_PACKED union {
char frameName[8]; // 9..16 Frame Name
char paletteName[8]; // 9..16 Palette Name
};
char companyName[8]; // 9..16 Frame Name
_PACKED union {
short totalPoints; // 25..26 Total points
short totalColors; // 25..26 Total colors
};
_PACKED union {
short frameNumber; // 27..28 Frame Number
short paletteNumber; // 27..28 Palette Number
};
short totalFrames; // 29..30 Total Frames
char scannerHead; // 31 Scanner Head
char future; // 32 Reserved for future use
};
};
} ILDA_Header_t;
ILDA_Header_t *ILDA_Header = (ILDA_Header_t *) GetNextBuf(readPos);
Wenn man noch etwas Performance ziehen will:
Code: Alles auswählen
if(ILDA_Header->keyNum != 0x41444C49) // Error in "ILDA" key
...
__asm("revsh point.x, ILDA_Format->ILDA_Format0.x");
__asm("revsh point.y, ILDA_Format->ILDA_Format0.y");
Da fehlt natürlich noch einiges, happy coding
Anm.: Die structs sind natürlich dicht, das "packed" nur dient dazu, dass der Compiler nicht auf dumme Gedanken kommt, da wir ja die Serialisierung benötigen. Gibt so schöne Sachen wie padding, verschieben, zerreissen etc. So kann ein Compiler eine Struktur nicht als base+offset, sondern überall vertreut im Speicher ablegen, wenn er das für sinnvoll erachtet. Sollte hier normalerweise auch ohne PACKED nicht passieren, da ja das buffer array in der gleichen union steckt.
Re: ILDA Parser
Verfasst: Fr 10 Dez, 2021 5:29 pm
von tkaulen
random hat geschrieben: ↑Fr 10 Dez, 2021 9:57 am
tkaulen hat geschrieben: ↑Do 09 Dez, 2021 10:57 pm
Suche einfach nach dem JAVA Package nl.sijpesteijn.ilda . Dann hast Du genau was Du benötigst
Oh backe, was ein Monster. In C ist das wesentlich einfacher.
Im Prinzip gebe ich Dir da zu 100% recht. Für Echtzeitstreaming mag das Performanceargument stimmen. Aber um offline eine ILDA Datei zuschreiben, kann man sich auch gekapselter Klassen bedienen. Meine Sachen die ich entwickele basieren zu 99% aus Java und 1% aus C Code, an den Stellen wo es an einer sehr engen Schnittstelle perfromancekritisch wird. Klar kann ich auch alles in Assembler oder C machen. Es geht bei einer objektorientierten Sprache wie Java in erster Linie um Produktivität und Fehlerfreiheit(nullpointer, garbage collction e.t.c.). Dabei kommt JAVA mit den neuen JIT-JVM schon sehr weit an die Geschwindigkeit von C heran. Und es ist hat sich etabliert für vieles klar abgekapselte Klassen zu benutzen. Auch wenn die einzelnen Klassen etwas Code Overhead haben, ist die Benutzung der Klassen dafür später viel übersichtlicher zu handeln.
liebe Grüße
Thomas
Re: ILDA Parser
Verfasst: Fr 10 Dez, 2021 6:16 pm
von adminoli
Java und Performance? Das ist ein Oxymoron!

Re: ILDA Parser
Verfasst: Fr 10 Dez, 2021 11:01 pm
von tkaulen
Es sind etwa 70 % gegenüber C++. Ja in vielen Sachen ist JAVA langsamer als C/C++. Hängt aber alles sehr vom Anwendungsfall ab.
Nach meinen Messungen starteten und liefen die Java-Versionen anfangs langsamer. Für Szenarien mit kurzer Laufzeit und wenn nur die Ausführungszeit im Mittelpunkt steht, wäre C/C++ vorzuziehen.
Aber dank der Just-In-Time-Optimierungen wurden die Java-Versionen im Laufe der Zeit schneller. In länger andauernden Szenarien werden sie sogar schneller fertig als die C/C++-Versionen, weil dann der Maschinencode an die aktuelle Situation angepasst und neu (JIT) kompiliert wird.
Re: ILDA Parser
Verfasst: Mo 13 Dez, 2021 8:35 am
von random
tkaulen hat geschrieben: ↑Fr 10 Dez, 2021 11:01 pm
In länger andauernden Szenarien werden sie sogar schneller fertig als die C/C++-Versionen, weil dann der Maschinencode an die aktuelle Situation angepasst und neu (JIT) kompiliert wird.
Das würde ich gerne verstehen, wie ein JAVA (JIT-) compiliertes Programm besser sein kann als ein gut geschriebenes C oder C++ Programm

Aber langsam wirds off-topic

Re: ILDA Parser
Verfasst: Mo 13 Dez, 2021 1:31 pm
von random
Wie (er-)gehts dem TO mittlerweile? Schon was geschafft?
Re: ILDA Parser
Verfasst: Mo 13 Dez, 2021 3:31 pm
von tkaulen
random hat geschrieben: ↑Mo 13 Dez, 2021 8:35 am
tkaulen hat geschrieben: ↑Fr 10 Dez, 2021 11:01 pm
In länger andauernden Szenarien werden sie sogar schneller fertig als die C/C++-Versionen, weil dann der Maschinencode an die aktuelle Situation angepasst und neu (JIT) kompiliert wird.
Das würde ich gerne verstehen, wie ein JAVA (JIT-) compiliertes Programm besser sein kann als ein gut geschriebenes C oder C++ Programm

Aber langsam wirds off-topic
Wir könne PN schreiben, weil sonst wird das hier zu off-topic
Re: ILDA Parser
Verfasst: Mo 13 Dez, 2021 5:03 pm
von adminoli
Java ist für mich wie früher Basic. Man benötigt immer einen Interpreter. Mit der Performance verhält es sich dadurch ähnlich.
Das Argument für Java ist halt immer: "Läuft überall", aber halt überall schlecht.
Außerdem ist JAVA seit einiger Zeit kostenpflichtig. Wenn du JAVA auf deinem Computer installierst und Unternehmer bist,
und kein Abo-Modell wählst, dann befindest du dich schon in der Illegalität.
Und Java (Oracle) kann teuer werden: Das Lizenzabonnement beginnt bei 2,13 € pro Nutzer bzw. 21,30 € pro Prozessor im Monat.