Organisation d'un fichier d'enregistrement avec des octets

Bonjour,
Je souhaiterai des conseils pour avoir un format de fichier lisible pour pouvoir tracer une courbe (ou autre chose).
Actuellement j'ai ce format d'enregistrement
STM32.zip (280 Bytes) Et quand j'utilise un utilitaire (Binary Viewer) pour ouvrir j'ai bien des valeurs


Par contre, je ne sais pas comment mettre un espace ou quelque chose pour distinguer une trame de données de 128 (par exemple, en sachant que le tableau de 128 peut varier) à une autre trame de 128 valeurs ?
Merci par avance de vos conseils.

Bonsoir
Possible de faire un truc du genre
[56|45|78|09|32|12]
Ca fait qu on peut facilement detecter un bloc entre [] puis ensuite splitter par rapport au caractere | pour retrouver les valeurs

N importe quel caractère peut convenir

Il est question d'un fichier binaire, pas d'un fichier texte.

J'ai déjà effectuer un enregistrement en réel sur la carte SD en ASCII et ça ne suit pas, la DMA va beaucoup plus vite que le temps d'enregistrement sur fichier, donc je passe en écriture hexa ou binaire pour gagner du temps. Comment on fait un CRLF en hexa dans un fichier binaire ? Je pense que c'est le plus simple non ?

C'est un fichier txt mais le contenu est en hexa (je crois) : J'utilise cette fonction

res = f_write(&SDFile, ptr,  sizeof (playbuf_RX), (void *)&byteswritten);

playbuf_RX c'est mon tableau de donnée et ptr c'est juste un pointeur, c'est comme ça la fonction

Faudrait pas tout mélanger.
C'est un fichier binaire. Il ne contient pas de texte, les valeurs sont en hexadécimal.

Il n'y a pas de texte, lors de la création je le nome en .txt mais son contenu est bien en hexa, regardez son contenu. Effectivement j'avais gardé le .txt du premier temps (avec une écriture en ASCII) pour pouvoir tracer la courbe sous Excel pour voir le résultat mais avec les modifications j'ai gardé le nom du fichier avec .txt mais son contenu ce n'est pas le même.

Bonjour DOY38

Réserver, si c'est possible, la valeur 255 (0xFF), comme séparateur.

Cordialement
jpbbricole

Merci je vais faire des essais, mais normalement avec un tableau de valeur il le rajoute automatiquement le CRLF au prochain d'enregistrement. Je vais effectuer des essais pour voir ce que cela donne, je laisse cependant le ticket ouvert au cas où.

Bonsoir DOY38

Peux tu mette ton programme en ligne?

Cordialement
jpbbricole

D'abord ce n'est pas du Arduino (c'est du STM32) et il appel beaucoup d'autres fonctions dans les fichiers différents, cela devient vite illisible pour tout le monde.

Donnes la partie qui enregistre les données.

Tu peux uniquement si tu stocke que des entier sur 8bits et que tu exclus la valeur 255.
Une solution simple est d'avoir une en-tête, ici l'en-tête peux se résumer a un entier, avec par exemple la taille de la trame.
J'ai l'impression que c'est un entier sur 16 bits qui est sauvé, mais que pour le test les 128 valeurs sont entre 0 et 127.
A quoi correspondent les valeurs en vrai ?

Ce n'est qu'un nom, cela n'a aucun rapport avec le contenu des données.

J'espère pas car cela veut dire que ca va polluer tes donner avec des valeurs décimal 13 et 10.
Cela est par contre souvent le cas, avec une sauvegarde en mode texte.

Comme l'indique donne nous ton code de sauvegarde et surtout comment tu veux lire ces données?

S il y a des problèmes de vitesse faudrait peut etre tout mettre dans une stream et ecrire le tout a la fin sur la sd
Enfin s il y a la place en mémoire

Regarde le message #5 c'est donné la partie qui enregistre des données

C'est exact, en mode binaire il n'y a pas de CRLF, j'ai enregistré un tableau de 1-127 ensuite j'enregistre des constantes de 0x28 et on voit bien


Il enchaine les données au cycle suivant. Je me pose la question mais alors puisque je connais la taille de mon tableau dans ce cas dans le post traitement je sais à quel moment j'ai les données suivantes. Il suffit de remplir les tableau qui vont de 0-127 et ainsi de suite, ça ne sert à rien de rajouter une caractère spéciale supplémentaire pour distinguer le début de la trame suivante.

En binaire tu n'ajoute "jamais" de caractèresoctet(s) de séparation(ou vraiment cas exceptionnel).
Tout à fait si tu as une structure fixe, ce n'est pas la peine de t'embêter.
le plus "simple" est de définir une structure de tes données et d'utiliser un pointeur sur ta structure que tu ferra pointer sur le premier élément de chaque cycle dans ton buffer.
Mais ça c'est pour la lecture, toi tu fais que écrire dans le fichier en Arduino?
Tu utilises quoi par lire le fichier ?

Oui effectivement, j'ai fait un enregistrement en données brute et je vérifie le fichier binaire après et ça l'air de fonctionner....A suivre