Frage der Optimierung String - char[n]
|
08.03.2020, 12:30
(Dieser Beitrag wurde zuletzt bearbeitet: 08.03.2020 12:59 von bytecook.)
Beitrag #1
|
|||
|
|||
![]()
Hi Leute,
ich möchte so sparsam wie möglich mit dem verfügbaren Speicher umgehen. Ich bin noch nicht wirklich so in C++ versiert, vielleicht könnt ihr mir hier weiterhelfen. Code: String encodeSerCmd(int8_t iCmd, int16_t iP1, int16_t iP2, int16_t iP3, int16_t iP4) { Meine Beispielsfunktion castet retStr auf String, der vermutlich mehr Speicher verbrauchen wird als ein Array of Char. Die Routine an sich funktioniert, das geht aber sicher eleganter und sparsamer, vermutlich kann man die Daten auch als Pointer zurückgeben. Da hakt es bei mir noch ein wenig. Kann mir wer die Richtung weisen? Update -- hätte jetzt mal als den Rückgabetyp char* probiert, und diesen dann wie folgt verwendet - leider ohne Erfolg... Code: void loop() { Vermutlich mache ich beim Dereferenzieren nur was falsch ... Update -- Danke vorab, Peter |
|||
08.03.2020, 17:29
Beitrag #2
|
|||
|
|||
RE: Frage der Optimierung String - char[n]
Wenn Du Speicher sparen willst, vergiss String.
Den Puffer (Anzahl Nutzzeichen +1) entweder static oder global anlegen, sonst funktioniert das mit der Rückgabe nicht. Beispiel: Code: char arrChars[40]; Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
08.03.2020, 19:21
Beitrag #3
|
|||
|
|||
RE: Frage der Optimierung String - char[n]
(08.03.2020 17:29)Tommy56 schrieb: Wenn Du Speicher sparen willst, vergiss String. Ha,das wusste ich nicht, danke Tommy. Wenn der Buffer ohnehin global wäre, reicht ja eine Void, also Code: void encodeSerCmd(uint8_t iCmd, int16_t iP1, int16_t iP2, int16_t iP3, int16_t iP4) { Die Nullterminierung ist bereits mitberücksichtigt, hatte nur vergessen, die erste Variable auf unsigned umzustellen, sind ohnehin nur ca. 150 Befehle, man spart wo man kann ![]() Naja, muss mich mehr in das Thema einlesen, aber der Ansatz passt schon mal... Gruß, Peter |
|||
08.03.2020, 19:23
Beitrag #4
|
|||
|
|||
RE: Frage der Optimierung String - char[n]
Ja, Rückgabetyp void geht auch, aber mit char * kannst Du das schnell mal in Serial Print werfen oder verketten.
Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
08.03.2020, 20:02
Beitrag #5
|
|||
|
|||
RE: Frage der Optimierung String - char[n]
(08.03.2020 19:23)Tommy56 schrieb: Ja, Rückgabetyp void geht auch, aber mit char * kannst Du das schnell mal in Serial Print werfen oder verketten. Hmm, die Rückantwort war bei mir immer leer. Irgendwie hatte ich da was falsch gemacht, vermutlich beim Dereferenzieren. Mittlerweile gelesen, dass ich unter C++ mit der Rückgabe eines lokalen Char Arrays doch recht fesch die eine oder andere Designregel verletze. Ich glaube, ich muss mir einfach damit behelfen, Arrays in Structs zu legen oder mir damit Records anlegen... Ich bin ja im Beruf von Delphi her echt verwöhnt ![]() Gruß, Peter |
|||
08.03.2020, 20:15
Beitrag #6
|
|||
|
|||
RE: Frage der Optimierung String - char[n]
Wird Delphi noch aktiv für Neuentwicklungen eingesetzt? Früher habe ich damit auch gearbeitet.
Ansonsten kannst Du auch die static-Variante benutzen: Code: char *encodeSerCmd(iCmd, int16_t iP1, int16_t iP2, int16_t iP3, int16_t iP4) { Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
08.03.2020, 20:53
Beitrag #7
|
|||
|
|||
RE: Frage der Optimierung String - char[n]
(08.03.2020 20:15)Tommy56 schrieb: Wird Delphi noch aktiv für Neuentwicklungen eingesetzt? Früher habe ich damit auch gearbeitet. Hehe, ja, warum auch nicht, sogar im technischen Bereich. Vorausgesetzt, man verwendet bei echt kritischen Routinen den Inline Asm ![]() Baue in meinem Bereich recht viele wiederverwendbare Softwarekomponenten inkl. eigenes Guiframework, ursprünglich basierend auf GR32. Gruß an einen "alten" Delphianer, Peter |
|||
08.03.2020, 20:58
Beitrag #8
|
|||
|
|||
RE: Frage der Optimierung String - char[n]
Grüße zurück, ich bin da mittlerweile raus.
Ich hatte Delphi hauptsächlich als Frontend für ORACLE-PL/SQL im Einsatz. Das könnte man problemlos durch ein Webfrontend ersetzen, der Kunde wollte eine Applikation. Da hat er halt diese bekommen. Privat habe ich noch ein paar kleinere Delphi 5 Sachen am Laufen. Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
|
|
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste