- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: hexadezimale Werte im Array !

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    10.02.2005
    Beiträge
    19

    hexadezimale Werte im Array !

    Anzeige

    Praxistest und DIY Projekte
    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

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    31.07.2005
    Beiträge
    54
    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

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    10.02.2005
    Beiträge
    19
    Ja super!

    Vielen Dank!


    casa74

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    10.02.2005
    Beiträge
    19
    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

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    31.07.2005
    Beiträge
    54
    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;
    }
    }

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Beiträge
    219
    Warum kann man in ein char - Feld auch Hexwerte schreiben?

    Weil ein char auch nur ein Byte ist.
    Egal ob du
    Code:
    char a = 'a';
    char a = 97;
    char a = 0x61;
    char a = 0b01100001;
    schreibst, es passiert immer dasselbe denn

    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:
    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];
    Es gibt auch Funktionen wie StrCpy die dasslebe machen. (Siehe array.h)
    Oder du könntest einfach in Feld a etwas Platz lassen und da b hineinschreiben

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    10.02.2005
    Beiträge
    19
    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

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.04.2005
    Ort
    Hamburg <-> Bremen
    Alter
    43
    Beiträge
    112
    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

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    31.07.2005
    Beiträge
    54
    hi

    jo, das ist schon möglich.

    bekommst du vom gps immer gleichviele daten?

    wenn ja, würde ich das etwa so machen:

    Code:
    #define HEADER_SIZE xBytes
    #define GPS_DATA_SIZE yBytes
    #define CRC_SIZE zBytes
    
    unsigned char frame[HEADER_SIZE + GPS_DATA_SIZE + CRC_SIZE];
    => du baust dir ein array, welches so gross ist, dass Header, GPS-Daten sowie CRC darin platz haben.

    während dem initialisieren kopierst du dir die immer gleichen header-daten rein

    Code:
    unsigned char i;
    for(i=0;i<HEADER_SIZE; i++){
        frame[i] = header_data[i];
    }
    die gps-daten kannst du jetzt auch gerade reinkopieren:

    Code:
    unsigned char i;
    for(i=HEADER_SIZE;i<GPS_DATA_SIZE + HEADER_SIZE; i++){
        frame[i] = get_gps_byte()
    }
    und am schluss nach analog die checksumme ...


    cu

    chris

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    10.02.2005
    Beiträge
    19
    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

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress