mikrocontroller.net

Forum: Compiler & IDEs Array mit printf_P als Hexzahlen ausgeben


Autor: Loipe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe folgende Variable:
unsigned char Telegramm[30];
unsigned char Zeiger;

das Array wird mit Daten von der seriellen Schnittstelle befüllt.
Das Telegramm hat immer eine unterschiedliche Länge
Die aktuelle Arraylänge steht in der Variable Zeiger.

Nun steht z.B. folgendes im Telegramm

0xBC, 0x12, 0x23, 0xF3, 0x65, 0x05, 0x00, 0x32, ...

Ich will nun mit der Funktion f16_printf_P die Daten in ein Textfile auf 
meine SD-Card schreiben.
Die Funktion und wird wohl ähnlich der Funktion printf_P sein.

Wie muss ich die Funktion befüllen, dass im Textfile dann als String 
(lesbar) BC1223F365050032 zu sehen ist. und nicht irgendwelche 
Sonderzeichen !!

Danke
Gruß Alex

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
for(i=0; i<Zeiger; i++)
 {
  f16_printf_P("%02X",Telegramm[i]);

oder

  f16_printf_P(PSTR("%02X"),Telegramm[i]);
 }

 f16_printf_P("\n");

Oder so ähnlich.

Autor: Loipe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Holger,

an so was habe ich auch schon gedacht, allerdings gefällt mir das nicht 
so, da die Funktion sehr oft aufgerufen wird. Es wird dann jedes Zeichen 
einzeln auf die SD-Karte geschrieben. Das nimmt viel Zeit in Anspruch.
Kann man das nicht schon einmal in eine Variable richtig stellen, und 
dann in einem Satz mit der f16_printf_P Funktion auf die SD-Karte 
schreiben.

Gruß Alex

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Es wird dann jedes Zeichen
>einzeln auf die SD-Karte geschrieben.

Ist das wirklich so? Dann ist deine FAT Lib aber
schlecht geschrieben :(

Autor: Loipe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Momentan sieht meine Funktion so aus, die Daten auf die SD-Karte zu 
schreiben.
Wie kann ich nun die drei f16_printf_P Funktionen auf eine reduzieren.
Ich weiß nicht wie ich die 3 Strings dann in eine Variable schreiben 
kann. Das mit den Pointern check ich nicht so wirklich ab.
Und dann die eine Variable komplett als einen String an die f16_printf_P 
Funktion übergeben.

  void EIB_log_write(void)
  {
    unsigned char i;

    if (Telegramm[0] == 0xBC)
    {
      File *logfile = f16_open(EIBlogStatus.log_datei,"a");

      if (logfile) 
      {
        f16_printf_P(logfile,PSTR("%2i.%2i.%2i;%2i:%2i:%2i;"),
                  TM_DD, TM_MM, TM_YY, TM_hh, TM_mm, TM_ss, Telegramm);

        for(i=0;i<Length_save+8;i++)
          f16_printf_P(logfile,PSTR("%x;"),Telegramm[i]);

        f16_printf_P(logfile,PSTR("\r\n"));
        f16_close(logfile);
      }
    }
  }

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.