Ich stehe gerade auf dem Schlauch. Funktionsweise eines Union ist mir bekannt. Ich kann auch einen aufbauen der float to byte dastellt.
Ich baue aber gerade eine Kommunikations Bibliothek und da scheitert es nun. Könnte mir einer ein Beispiel zeigen, was z.B. in cpp und h drin sein muss!?
Ich kann auch einen aufbauen der float to byte dastellt.
Das ist doch fein!
Tuts in Libs genauso, wie im Programm.
Exakt genau so.
Aber andererseits ist es ein dumme Idee, UNION-Strukturen als Typekonvertierer zu missbrauchen. Insbesondere, wenn Daten gespeichert, oder versendet werden sollen.
Der Grund ist ganz schlicht: Zuviele implizite Abhängigkeiten.
Der Code darf nie auf einer anderen Plattform laufen.
Die Daten dürfen nie nicht zu anderen System transportiert werden.
Compiler und Compilerschalter dürfen nie verändert werden.
:o Ich gebe zu, das waren jetzt viele "NIE" :o
Und natürlich weiche "nie", denn mit Sonderbehandlungen kann man die "nie" zu "geht doch" wandeln. Aber trotzdem: Obacht! Man hat sich damit schnell mal eben ein Bein gestellt. Selber.
Wegen sowas sind schon Raketen abgestürzt
Hmm wie wäre es den besser Float to Byte und Byte to Float darzustellen?
Ich finde dazu immer nur eben dieses Beispiel, jene sind wohl keine Raketenwissenschaftler =). Normal erarbeite ich mir meine Antworten selbst, aber ich laufe gerade auf Grund. Das es in der Lib genauso läuft war mir klar, aber wie der aufbau dort ist. Mit dem deklarieren CLASS:: ich habe das Verschiedenstes Probiert aber an allem gescheitert.
Du müßtest auch einen Bytepointer auf den float setzen können.
float zahl = 123.45;
byte *bpointer;
byte b;
bpointer = (byte*)&zahl;
for (byte i = 0; i < sizeof(zahl); i++) {
b = *(bpointer+i);
// Tu was mit b
Serial.println(b,HEX);
}
Ob union oder "falsch" gecastete Pointer: Theoretisch Böse, praktisch erstmal kein Problem
Wenn du das ganze dann auf komplett verschiedene Hardware portierst, und die gleiche .cpp Datei für zig unterschiedliche Prozessoren kompilieren willst, sehen wir weiter.
Aber wenn dein Problem nur darin besteht, wie du .cpp und .ino die gleiche union bekanntmachen willst:
union ist Standard - C, und hat mit "Library erstellen für Arduino" erstmal nichts zu tun ?
Und wie eine Library üblicherweise aussieht, dafür gibt es ja genug Beispiele.
Wenn du eine bestimmte union deklarieren willst, kannst du das gerne in der .h Datei machen.
Eine globale Variable kannst du in der .h Datei als extern deklarieren und entweder in der .ino oder der .cpp definieren. Oder sie einfach an die library in einem Methoden/Funktions-Parameter als Referenz übergeben.
Die Frage klang so, als ob eine einfache Antwort gesucht wäre...
Die Frage klang so, als ob eine einfache Antwort gesucht wäre...
Für mich kling die Frage "aus dem Kontext gerissen"
Oft ist es so, dass Stolpersteine auftreten, weil man auf einem falschen Weg ist.
Ein typisches Kennzeichen von Irrwegen ist: Irgendwann gehts nicht weiter!
KA, ob "dieses hier" wirklich ein falscher Weg ist, aber ich helfe ungerne Leute weiter auf einem falschen Weg.
Man kann gute Wege viel besser erkennen, wenn man weiß, wo es her kommt, und hin gehen soll.
Oh man, aus dem Grund stelle ich fast nie selber Fragen... sondern suche mir die Antworten. In diesem Fall habe ich zwar schon zu lange gesucht, aber eine Glaubenskrise auslösen ist auch nichts womit ich mich aufhalten will.
oOSpikeOo:
Oh man, aus dem Grund stelle ich fast nie selber Fragen... sondern suche mir die Antworten. In diesem Fall habe ich zwar schon zu lange gesucht, aber eine Glaubenskrise auslösen ist auch nichts womit ich mich aufhalten will.
Ich habe KA, warum du die UNION nicht in deine Lib rein bekommst...
Und wie ich dir anmerke, möchtest du sowohl Kontext, als auch deine Versuche, geheim halten.
Damit habe ich kein Chance dir zu helfen....
:o und das: ganz ohne jede Glaubenskrise :o
Dich meine ich auch nicht. Warum ich keinen Code poste. Weil ich nicht möchte das ihr mir meine Programm schreibt. Ich will verstehen - dazulernen.
Hab´s nun aber hin bekommen wie ich ein Union einer Bib benutze, nur die Rückgabe ist genauso besch... weil ich ja kein Array referenzieren kann. Also dirket aufs Union zugreifen. Ist echt nicht toll aber läuft. Wenn man "arduion float to byte" sucht bekommt man fast ausschließlich Union als Antwort. Und der Rest ist dann so unverständlich das sich die Leute dann darüber streiten und man auch nicht schlauer wird, weil man nicht weiss was denn nun Richtig ist.