INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
ReadBytes in wordarray
27.10.2015, 20:30
Beitrag #1
ReadBytes in wordarray
Hallo,

ich möchte z. B. 400 Bytes über die serielle Schnittstelle einlesen, die Bytes gehören paarweise zu einem word. Ideal wäre etwas wie

word a[200];
Serial.readBytes(a,400);

Leider meckert der Compiler, zu Recht.

Ich habe viel in der Richtung versucht (z. B. a[0], Pointer), aber ohne Erfolge. Jetzt lese ich alles erst in "byte b[400];" ein und speichere es dann per Programm in in a um.

a) unschön
b) 400 Byte RAM vergeudet, das ist bei einem Arduino UNO schon schmerzlich.

Hat jemand eine bessere Idee?

Viele Grüße
GuaAck

P.S.: Bin eigentlich Pascaler, kenne C nur ansatzweise.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.10.2015, 20:51
Beitrag #2
RE: ReadBytes in wordarray
(27.10.2015 20:30)GuaAck schrieb:  Hallo,

ich möchte z. B. 400 Bytes über die serielle Schnittstelle einlesen, die Bytes gehören paarweise zu einem word. Ideal wäre etwas wie

word a[200];
Serial.readBytes(a,400);

Leider meckert der Compiler, zu Recht.

Ich habe viel in der Richtung versucht (z. B. a[0], Pointer), aber ohne Erfolge. Jetzt lese ich alles erst in "byte b[400];" ein und speichere es dann per Programm in in a um.

a) unschön
b) 400 Byte RAM vergeudet, das ist bei einem Arduino UNO schon schmerzlich.

Hat jemand eine bessere Idee?

Viele Grüße
GuaAck

P.S.: Bin eigentlich Pascaler, kenne C nur ansatzweise.

Hi,
na dann lies dir mal diesen Thread von Ardu_Arne durch....der Anlass dazu war das man float oder Long int in Bytes zerlegen wollte.... kannst ja mal testen ob es bei dir auch klappt...müßte eigentlich.
Also bei long int nach Byte und wieder zurück geht das mit der Union Perfekt.
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.10.2015, 20:56 (Dieser Beitrag wurde zuletzt bearbeitet: 27.10.2015 21:02 von Mathias.)
Beitrag #3
RE: ReadBytes in wordarray
Wieso liest du nicht in einer for-Schleife 2 Bytes ein, und schreibst die vor zu in die Word-Array ?
Code:
for (int i = 0; i <= 200; i++) {
  byte b1, b2;
  Serial.readBytes(b1, 1);
  Serial.readBytes(b2, 1);
  a[i]=b1 + b2 * 256;  // evtl. b1 und b2 vertauschen
}
Ich hoffe du verstehst was ich meine.

Zitat:P.S.: Bin eigentlich Pascaler, kenne C nur ansatzweise.
Das bin ich auch.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.10.2015, 22:57
Beitrag #4
RE: ReadBytes in wordarray
Danke Bitklopfer

das suchte ich!!! union ist in der IDE nicht beschrieben und das Wort wird auch nicht als Schlüsselwort markiert. Aber der Complier schluckt es, dann muss es gehen.

Mathias, danke auch; Deine Lösung löst das Speicherproblem, ich habe aber Zeitprobleme befürchtet, deshalb habe ich es nicht versucht; und ich müsste die Zeichen selbst zählen. Mein "Speicher-Schmerz" war für diesen Umstand noch nicht groß genug.

Grüße an beide
GuaAck
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.10.2015, 16:52
Beitrag #5
RE: ReadBytes in wordarray
Die Union ist natürlich eine gute Lösung, unter Pascal macht man sowas mit absolute.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.10.2015, 18:57
Beitrag #6
RE: ReadBytes in wordarray
Das müsste auch gehen:
Code:
int a[200];
Serial.readBytes((byte*)(a), 400);
Schafft es jemand noch kürzer?
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.10.2015, 21:01
Beitrag #7
RE: ReadBytes in wordarray
(28.10.2015 18:57)Thorsten Pferdekämper schrieb:  Das müsste auch gehen:
Code:
int a[200];
Serial.readBytes((byte*)(a), 400);
Schafft es jemand noch kürzer?
Gruß,
Thorsten

Hi nur dem besseren Verständnis nach...
..ich vermisse hier das hochzählen vom Index oder ist das ein zuläßiger Trick in C ?
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.10.2015, 21:05
Beitrag #8
RE: ReadBytes in wordarray
Hi,
readBytes liest so viele Bytes an die angegebene Adresse, wie der zweite Parameter sagt. So steht's in der Doku. Was für einen Index brauchst Du da noch?
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste