Ich möchte gerne über eine neue Funktion 2 Byte Arrays verbinden und zurückgeben.
Jetzt habe ich 3 Stunden gesucht, aber nichts für Arduino gefunden.
Ich mache es bisher mit For i Schleifen:
for(int i=0;i<sizeof(data2);i++) ...
Doch ist das auf die Dauer zu kompliziert.
Hat jemand eine einfachere Lösung anstatt mit zig For i Schleifen mühsam ein neues Byte Array zusammen zu basteln?
Danke, doch habe ich das schon probiert. Es funktioniert nicht. Auch memmove() hatte ich schon probiert, sowie byte* usw.
Bekomme keine funktionierenden Ergebnisse.
Gibt es keine einfach fertige Funktion für den Arduino die ich aufrufen kann und ein zusammengefügtes Array zurück gibt?
Nein. So funktioniert Speicher in C/C++ nicht. Sowas geht in Sprachen wie Java oder C# wo du eine Speicherverwaltung und Garbage Collection hast.
Hier bist du selbst für den Speicher verantwortlich. Du musst ein Array anlegen das groß genug für alle Daten ist und dann die zwei anderen Arrays da rein kopieren. Wenn du das in einer Funktion machst, musst du das Ziel-Array an die Funktion übergeben.
Und tunlichst aufpassen, dass du niemals über die Grenzen des bereitgestellten Speichers schreibst! Sowie sich das anhört, ist dir das wahrscheinlich schon passiert. Du kannst z.B. nicht einfach ein zweites Array hinter ein anderes kopieren, da der Speicher dafür nicht vorhanden ist.
Eine andere Möglichkeit ist dynamischen Speicher zu verwenden, das erste Array mit realloc() zu vergrößern und nur das zweite zu kopieren. Aber wenn du schon mit statischem Speicher überfordert bist, lass das besser sein.
EDIT:
In C++ auf dem PC geht sowas mit Collections wie Vektoren und Listen. Aber das gibt es standardmäßig auf dem Arduino nicht. Und selbst dann ist man selbst dafür zuständig den Speicher wieder aufzuräumen.
Danke. "realloc" hatte ich auch schon probiert, funktionierte aber auch nicht.
Gut dann müssen wohl die unschön anmutenden for i Schleifen bleiben.
Schade das immer alles so kompliziert sein muss, anstatt einfach.
Du solltest dir erst mal ein paar Grundlagen ansehen und nicht nur willkürlich Code ausprobieren.
realloc() geht nur mit dynamischem Speicher der mit malloc() angelegt wurde. Statischen Speicher kann man nicht ändern.
Was du willst geht schon und so kompliziert ist es auch nicht. Aber du musst verstehen was gemacht wird und wieso.
Wenn es die Anwendung zulässt könnte man vielleicht auch das erste Array gleich so groß machen, dass Platz für alle Daten ist. Dann muss man nichts vergrößern (dynamisch) oder ein drittes Array anlegen (statisch).
Und wenn das Kopieren mit einer for-Schleife klappt, geht es auch mit memcpy()
realloc() geht nur mit dynamischem Speicher der mit malloc() angelegt wurde. Statischen Speicher kann man nicht ändern.
Genauso habe ich es gemacht. Funktionierte aber nicht. Habe mir vorher die man pages für die Befehle alle angesehen. Ich bekomme mit sizeof() immer nur die Länge 2.
Ich gebe es auf. Trotzdem danke, ich weiss was Du meinst, aber das Problem bin nicht ich, sondern die allgemeine Computer-Struktur. All das ist so angelegt, dass man erst alles bis ins kleinste Bit studieren muss, verstehen muss wie Maschinen arbeiten.
All das könnte man durch eine andere Chipstruktur + interne Verarbeitung ändern und auf Chipebene lösen, dabei nach aussen sehr komfortable und einfache Funktionen anbieten... die wir aber nun hier in C lösen und dafür büßen müssen 
Warum bietet keiner Chips an, die all diese Probleme intern lösen?
Flexibilität? Soll nur ein Denkanstoss sein, keine Diskussion 
Dann hast du wahrscheinlich sizeof() von einem Zeiger gemacht. Da kommt natürlich 16 Bit = 2 Byte raus. Du musst die Größe des Arrays in einer extra Variablen verwalten.
Das Problem hier ist dass solche kleinen Prozessoren nicht viele Ressourcen haben. Eine automatische Speicherverwaltung kostet auch Rechenzeit und RAM. Auf einem AVR mit 2kB RAM wäre das Irrsinn. Auf größeren Mikrocontrollern, geht sowas, aber man merkt auch deutlich dass es Leistung kostet. Und auch dann wird das nicht durch den Prozessor selbst erledigt, sondern in Software.