Probleme mit Synapse - USB Serial

Rund um die LCL und andere Komponenten
Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Probleme mit Synapse - USB Serial

Beitrag von Timm Thaler »

Mathias hat geschrieben:Will man aber einen AVR alles an Geschwindigkeit rausholen,


... dann nimmt man sicher nicht die Arduino-Umgebung, sondern macht das direkt in C oder ASM.

Gerade die fertigen Routinen sind zwar sehr benutzerfreundlich für den Einsteiger, aber alles andere als auf Geschwindigkeit optimiert.

Mathias hat geschrieben:muss man einer Binären Übertragen den Vorrang geben.


Eine binäre Übertragung ist so ziemlich das Fehleranfälligste, was es gibt, vor allem wenn man Char(0) drin hat, und man kann keinerlei Steuerzeichen senden. Es gibt aber einen guten Mittelweg, eine hexadezimale Übertragung: Man sendet jedes Byte als 2 Zeichen 0..9..A..F. Damit ist man immer noch schnell, es läßt sich sehr einfach hin- und zurückwandeln und man hat im ASCII-Raum noch jede Menge Steuerzeichen.

Mathias hat geschrieben:Ein IntToStr brauch sehr viel kostbare Leistung in einem AVR.


Man nimmt im AVR auch nicht die Standard-Stringbefehle. Eine klever gebaute Wandlung einer Festkomma- oder Integerzahl in einzelne ASCII-Zeichen in C oder ASM läuft immer noch schneller durch, als die Serielle die Zeichen rausjagen kann.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Probleme mit Synapse - USB Serial

Beitrag von mschnell »

Mathias hat geschrieben:Dies ist sicher ein gute Sache, dies funktioniert aber nur, wen man Text-Dateien überträgt....

Das Stichwort hier heißt "Transparentisierung". Da gibt es jede Menge unterschiedliche Verfahren.

Wenig Rechenaufwand kostet es z.B. statt 7 Bytes jeweils 8 Bytes mit high-Bit = 0 zu übertragen und ein Byte mit high-Bit = 1 ist der Block-Anfang. Die 7 anderen Bytes können dann noch eine Block-Typ-Kennung, Block-Länge o.ä. sein.

-Michael

Mathias
Beiträge: 6193
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Probleme mit Synapse - USB Serial

Beitrag von Mathias »

... dann nimmt man sicher nicht die Arduino-Umgebung, sondern macht das direkt in C oder ASM.

Ist ein Arduino-Sketch nicht c++ ? :roll:

Gerade die fertigen Routinen sind zwar sehr benutzerfreundlich für den Einsteiger, aber alles andere als auf Geschwindigkeit optimiert.

Das sieht man schon sehr gut, bei einem einfachen digitalWrite(... , da ist eine direkte Portmanipulation vorzuziehen.

Eine binäre Übertragung ist so ziemlich das Fehleranfälligste,

Das ist leider ein Wermutstropfen. Die Übertragung geht nur wen man kontrolliert überträgt, so wie ich oben geschrieben habe.

Eine klever gebaute Wandlung einer Festkomma- oder Integerzahl in einzelne ASCII-Zeichen in C oder ASM läuft immer noch schneller durch, als die Serielle die Zeichen rausjagen kann.

Wen man mit 2'000'000 Baud überträgt, hat der AVR nicht mehr viel vorige Zeit. Oder gar bei einem Leonardo, der überträgt noch schneller.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Probleme mit Synapse - USB Serial

Beitrag von pluto »

Ist ein Arduino-Sketch nicht c++ ?

Er sprach von c nicht von c++. Die OOP kann auch Zeit kosten.

Das sieht man schon sehr gut, bei einem einfachen digitalWrite(... , da ist eine direkte Portmanipulation vorzuziehen.

Bei Arduino nutzte ich z.b. die String Klasse nicht auf ein NodeMCU schon.....
MFG
Michael Springwald

Mathias
Beiträge: 6193
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Probleme mit Synapse - USB Serial

Beitrag von Mathias »

Er sprach von c nicht von c++. Die OOP kann auch Zeit kosten.

Zeitkritischen Sachen macht man auf einen Arduino auch möglichst ohne Klassen.

Gutes schlechtes Beispiel in Pascal, wie man Resourcen verpuffen kann:

Code: Alles auswählen

for i := 0 to 1000 do begin
  MyClass := TMxClass.Create;
  MyClass.Mache_was;
  MyClass.Free;
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten