hi
ja, das geht auch mit hex-werten:
unsigned char myArray[] = {0x01, 0x02, 0xff};
unsigned desshalb, da signed von -128 bis 127 geht, und alle werte ab 0x7f grösser als 127 sind -> sonst kanns kompilerwarnungen geben
cu
chris
Hallo Zusammen,
möchte gerne 30 konstante hexadezimale Werte in einem Array speichern.(ATMEGA,
die dann später der Reihe nach über den USART ausgegeben werden sollen.
Für das Speichern von char Zeichen kann ich ja einfach folgenden Befehl nutzen:
Beispiel:
char Array[30]='a','b','c','d','e'....,\0;
Kann ich genauso mit hexadezimalen Werten verfahren ??
Oder gibt es da sogar eine andere Methode ?
Danke und Gruß
Casa74
hi
ja, das geht auch mit hex-werten:
unsigned char myArray[] = {0x01, 0x02, 0xff};
unsigned desshalb, da signed von -128 bis 127 geht, und alle werte ab 0x7f grösser als 127 sind -> sonst kanns kompilerwarnungen geben
cu
chris
Ja super!
Vielen Dank!
casa74
Noch mal eine Frage dazu!
Kann man den Inhalt von 2 Arrays zu einem zusammenfassen um ihn dann später zu senden ?
Das Problem ist ,daß die Daten die ich senden möchte zu einem Teil aus
Konstanten besteht und zum anderen aus Daten ,die über den USART empfangen werden
und in einem anderen Array gespeichert werden.
Diese möchte ich dann gerne zusammenfügen und aus einem Array auslesen und an den TX des USART führen.
geht das ? und wenn ja, wie würde das aussehen ?
Danke
Casa74
hmm, kannst du genauer beschreiben, wie dieses zusammensetzen aussehen soll?
am besten mit zahlenbeispiel - da gibts sicher eine möglichkeit
cu
chris
ps: wenn du zuerst das eine, dann das andere array übertragen willst, machst du das am besten in der sende-methode
also sinngemäss:
send(){
für jedes element von array1{
sende zeichen;
}
für jedes element von array2{
sende zeichen;
}
}
Warum kann man in ein char - Feld auch Hexwerte schreiben?
Weil ein char auch nur ein Byte ist.
Egal ob du
schreibst, es passiert immer dasselbe dennCode:char a = 'a'; char a = 97; char a = 0x61; char a = 0b01100001;
Ascii-Wert von a = 97
HEX(97) = 61
BINÄR(97) = 01100001
Für den Rechner gibt es da keinen Unterschied, er sieht keine Buchstaben, nur Binärzahlen.
Array kopierst du einfach aneinander:
Es gibt auch Funktionen wie StrCpy die dasslebe machen. (Siehe array.h)Code:char a[] = {'a','b','c'}; char b[] = {'1','2','3'}; char c[]; c = a + b; // FALSCH!!!! a und b sind Pointer auf das erste Feldelement, a+b = irgendwo aber nicht da wo es sein soll for(uint8_t i=3; i>0; i--)c[i] = a[i]; //richtig!!! for(uint8_t i=3; i>0; i--)c[i+3] = b[i];
Oder du könntest einfach in Feld a etwas Platz lassen und da b hineinschreiben
Vielen Dank erstmal für die Erklärungen,
ich denke das ist vom Prinzip her schon fast was ich gesucht habe.
@cavegn
habe vor daten eines GPS-Empfängers, die über den USART empfangen
werden sollen, in einen Array zu speichern.
Später sollen dieser dann in einen Bitrahmen eingefügt werden(AX.25)
Der Header eines solchen Rahmens ist immer gleich, daher die Idee
in einen anderen Array die festen Daten zu speichern.
Dann wollte ich diese beide Array zusammenfügen, daraus eine
CRC-Prüsumme berechnen, der dann zum Schluss angehangen wird.
Und dann soll das Ganze wieder über den USART an ein AFSK-Modem gesendet werden.
Ich denke, daß das durch zusammenführen der einzelnen Array möglich
sein sollte, oder!?
So war zumindest meine Überlegung !!
Gruß!
casa74
Hallo,
dann wuerd ich das mit dem zusammenkopieren lassen und einfach die beiden Arrays nacheinander senden und die Pruefsumme hinterher
Sparst Du Code und Speicherplatz![]()
hi
jo, das ist schon möglich.
bekommst du vom gps immer gleichviele daten?
wenn ja, würde ich das etwa so machen:
=> du baust dir ein array, welches so gross ist, dass Header, GPS-Daten sowie CRC darin platz haben.Code:#define HEADER_SIZE xBytes #define GPS_DATA_SIZE yBytes #define CRC_SIZE zBytes unsigned char frame[HEADER_SIZE + GPS_DATA_SIZE + CRC_SIZE];
während dem initialisieren kopierst du dir die immer gleichen header-daten rein
die gps-daten kannst du jetzt auch gerade reinkopieren:Code:unsigned char i; for(i=0;i<HEADER_SIZE; i++){ frame[i] = header_data[i]; }
und am schluss nach analog die checksumme ...Code:unsigned char i; for(i=HEADER_SIZE;i<GPS_DATA_SIZE + HEADER_SIZE; i++){ frame[i] = get_gps_byte() }
cu
chris
Ich denke so werde ich es mal versuchen, vielen Dank für den Vorschlag !
Der GPS-String ist immer gleichgroß , dürfte deswegen kein Problem
sein !
Muss jetzt nur mal schauen wie ich das so von der Programmstruktur in
eine Main unterkriege !
weiss halt im Moment noch nicht, ob ich das so der Reihe nach innerhalb
des Main-Programms runterschreiben kann, also z.B
1. Usart initialisieren
2. Über USART Empfangen
3. In Array speichern
4. zusammenfügen
5. CRC Bilden
5. Senden über USART
u.s.w !
Muss mal schauen, werde mal versuchen und mich wieder melden !
Gruß !
casa74
Lesezeichen