Forum: Mikrocontroller und Digitale Elektronik Datenübertragung http Problem Null/asc(32)


von grundschüler (Gast)


Lesenswert?

Ich möchte 8bit-Werte vom uc per http an den PC übertragen.
1
         timestamp_15m=hou*4+min/15;
2
           http_tx_string[0]=timestamp_15m;
3
              http_tx_string[1]=ds_temp[0]>>8;
4
              http_tx_string[2]=ds_temp[0];
5
              http_tx_string[3]=ds_temp[1]>>8;
6
              http_tx_string[4]=ds_temp[1];
7
              http_tx_string[5]=ds_temp[2]>>8;
8
                http_tx_string[6]=ds_temp[2];
9
              http_tx_string[7]=ds_temp[3]>>8;
10
                http_tx_string[8]=ds_temp[3];
11
              http_tx_string[9]=ds_temp[4]>>8;
12
                http_tx_string[10]=ds_temp[4];
13
  /*              http_tx_string[11]='a';
14
                http_tx_string[12]='b';
15
                http_tx_string[13]='b';*/
16
                http_tx_string[11]='\0';
17
                http_tx_string[12]=0;
18
                http_tx_string[13]= (u16)222>>8;
19
                http_tx_string[14]=((u16)222&0xff00)>>8;
20
             http_tx_string[15]=timestamp_15m;
21
           http_tx_string[18]='\r';
22
          http_tx_string[19]='\n';

das kommt an:
\?S?S Ø?S?S    \__


Anscheinend werden bis auf '\0' alle 8bit-Werte richtig übertragen. Null 
wird durch asc(32)=blank ersetzt. D.h. Ich kann beim Empfangen nicht 
zwischen 0 und 32 unterscheiden. Gibt es da einen Trick bzw. wie 
übertrage ich 8bit-Werte am einfachsten? z.B. 2x4-bit?

von Schaulus Tiger (Gast)


Lesenswert?

Normalerweise so:
1
snprintf (http_tx_string, sizeof(http_tx_string),
2
          "?hour=%d&min=%d&temp0=%d&temp1=%d",
3
          hour, min, temp[0], temp[1]);

von Tim (Gast)


Lesenswert?

http://www.rfc-editor.org/rfc/rfc1738.txt sagt:
1
   URLs are written only with the graphic printable characters of the
2
   US-ASCII coded character set. The octets 80-FF hexadecimal are not
3
   used in US-ASCII, and the octets 00-1F and 7F hexadecimal represent
4
   control characters; these must be encoded.

von grundschüler (Gast)


Lesenswert?

danke für die späten Antworten.

Problem liegt offenbar nicht bei der http-Übertragung sondern schon beim 
Speichern auf der sd-Karte:
1
        //++ sd appand
2
        res = f_open( &Fil , Dateiname , FA_READ | FA_WRITE);
3
        /* Move to end of the file to append data */
4
        res = f_lseek(&Fil, f_size(&Fil));
5
        if( res == FR_OK ){
6
        res = f_write(&Fil, http_tx_string, sizeof(http_tx_string), &bw);
7
        f_close(&Fil);
8
        }//-- sd appand
Bei der Datei für den 19.1. werden die Nullen richtig geschrieben. 
Fehlerursache bei der Datei vom 18.1. ist mir unklar.- egal, Feierabend 
für heute.

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.