2017-10-05 7 views
0

Je travaille sur un projet IOT en utilisant MSP430F5529LP et CC3100Boost. Le matériel se connecte avec succès au cloud et échange des données. La réponse aux périphériques IOT est basée sur XML. J'essaie d'analyser les données. Le printf("\n%.*s\n", pch2-pch1-8, pch1 +8); suivant extrait les données et imprime sur la console. Maintenant besoin de sauvegarder ces données dans une variable. Voici mon extrait de code. La réponse pourrait être évidente, malheureusement je ne la vois pas.Analyse du texte XML sur une plate-forme MSP430F5529LP + CC3100Boost

_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); 

Références:

+0

Veuillez noter que c'est une mauvaise idée d'utiliser stdio.h sur les microcontrôleurs bas de gamme, car cela demande beaucoup de ressources. J'imagine qu'il balaie environ 5% des ressources MCU (RAM + flash) sur un MSP430F5529. Typiquement, il mange quelque part autour de 1-2kb de RAM et 2-4kb de flash sur un 16 amer. – Lundin

+1

@Lundin, Ceci est une preuve de concept. Mais si l'on devait parvenir au même résultat, comment le feriez-vous sans utiliser stdio.h? Est-ce typique de traiter chaque octet au lieu d'utiliser la bibliothèque. –

+1

Il est assez facile d'écrire une fonction qui envoie des caractères à un UART ou à tout ce que stdout correspond à votre MCU. Nous parlons d'une fonction de taille de code <100 octets, au lieu de> 2kb, pour faire exactement la même chose. En outre, stdio.h est connu pour le manque de sécurité de type. – Lundin

Répondre

1
  1. Assurez-vous que les données reçues sont valides et d'une longueur qui conviendra.
  2. Imprimez-la en utilisant sprintf() ou une fonction équivalente. Imprimez cette chaîne sur la console avec puts(the_string).