Forum: Compiler & IDEs Array mit printf_P als Hexzahlen ausgeben


von Loipe (Gast)


Lesenswert?

Hallo,

ich habe folgende Variable:
1
unsigned char Telegramm[30];
2
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

von holger (Gast)


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.

von Loipe (Gast)


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

von holger (Gast)


Lesenswert?

>Es wird dann jedes Zeichen
>einzeln auf die SD-Karte geschrieben.

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

von Loipe (Gast)


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.
1
  void EIB_log_write(void)
2
  {
3
    unsigned char i;
4
5
    if (Telegramm[0] == 0xBC)
6
    {
7
      File *logfile = f16_open(EIBlogStatus.log_datei,"a");
8
9
      if (logfile) 
10
      {
11
        f16_printf_P(logfile,PSTR("%2i.%2i.%2i;%2i:%2i:%2i;"),
12
                  TM_DD, TM_MM, TM_YY, TM_hh, TM_mm, TM_ss, Telegramm);
13
14
        for(i=0;i<Length_save+8;i++)
15
          f16_printf_P(logfile,PSTR("%x;"),Telegramm[i]);
16
17
        f16_printf_P(logfile,PSTR("\r\n"));
18
        f16_close(logfile);
19
      }
20
    }
21
  }

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.