2017-10-05 2 views
0

Ich arbeite an einem IOT-Projekt mit MSP430F5529LP und CC3100Boost. Die Hardware verbindet sich erfolgreich mit der Cloud und tauscht Daten aus. Die Antwort auf die IOT-Geräte ist XML-basiert. Ich versuche die Daten zu parsen. Das folgende printf("\n%.*s\n", pch2-pch1-8, pch1 +8); extrahiert die Daten und druckt auf der Konsole. Jetzt müssen diese Daten in einer Variablen gespeichert werden. Hier ist mein Codeausschnitt. Die Antwort könnte offensichtlich sein, leider sehe ich es nicht.Analysieren von XML-Text auf einer MSP430F5529LP + CC3100Boost-Plattform

_i8 * databuffer; 
char * pch0; 
char * pch1; 
char * pch2; 
char data[7]; 

pch0 = strstr((char *)dataBuffer,"textResponse"); 
pch1 = strstr(pch0,"<text_1>"); 
pch2 = strstr(pch1,"</text_1>"); 
printf("\n%.*s\n", pch2-pch1-8, pch1 +8); 

Referenzen:

+0

Bitte beachten Sie, dass es eine schlechte Idee ist, stdio.h auf Low-End-Mikrocontrollern zu verwenden, da es sehr ressourcenintensiv ist. Ich würde vermuten, dass es etwa 5% der MCU-Ressourcen (RAM + Flash) auf einem MSP430F5529 wegbläst. Typischerweise frisst es irgendwo 1-2kb RAM und 2-4kb Flash auf 16 Bit. – Lundin

+1

@Lundin, Dies ist ein Proof of Concept Design. Aber wenn man dasselbe erreichen würde, wie würdest du es tun, ohne stdio.h zu benutzen? Ist es typisch, jedes Byte zu verarbeiten, anstatt die Bibliothek zu verwenden? –

+1

Es ist ziemlich einfach, eine Funktion zu schreiben, die Zeichen an einen UART oder was auch immer stdout auf Ihrer MCU entspricht. Wir sprechen von einer Funktion mit <100 Byte Code-Größe anstelle von> 2kB, um genau das Gleiche zu tun. Darüber hinaus ist stdio.h für die mangelnde Typsicherheit berüchtigt. – Lundin

Antwort

1
  1. Sicherstellen, dass die empfangenen Daten gültig ist, und von einer Länge, die passt.
  2. Drucken Sie es auf eine Zeichenfolge mit sprintf() oder gleichwertige Funktion.
  3. Drucken Sie diese Zeichenfolge mit puts(the_string) auf der Konsole.