Valeur des octets dans un .hex

Jul 19, 2011 42 Replies

Bonjour,



Je commence =C3=A0 coder un bootloader afin de pouvoir mettre =C3=A0 jour l'application d'un micro-contr=C3=B4leur AVR (Atmega644) via une interface MIDI, en utilisant les SySex.



Pour cela, je dois m'assurer que le 8e bit de chacun des octets que j'envoie soit nul.



Pour tout =C3=A7a, aucun probl=C3=A8me.



Le truc, c'est qu'en examinant (enfin, en survolant =C3=A7a serait plus exact) le contenu du .hex de mon application (pas le bootloader, hein : il est pas encore cod=C3=A9 :-) ) avec un =C3=A9diteur hexad=C3=A9cimal, je= remarque que les valeurs des octets ne d=C3=A9passent jamais 0x7F. On est m=C3=AAme assez loin puisque =C3=A7a ne d=C3=A9passe m=C3=AAme pas 0= x50.



Donc ma question porte sur la valeur de ces octets. Peut-=C3=AAtre qu'il y a une chose (raison technique, norme ou je ne sais quoi) qui fait que la valeur de ces octets ne d=C3=A9passera jamais 0x7F et dans ce cas, je pourrais m'affranchir d'un encodage 8 bits -> 7 bits. Je penche plut=C3=B4t sur le fait que c'est juste un =C2=AB coup de chance = =C2=BB dans mon cas ...



Vous avez une id=C3=A9e ?



Merci, Lo=C3=AFc


On 19 juil, 19:02, Lo=EFc GRENON

Un fichier HEX est =E9ditable, donc cod=E9 en ASCII : ca explique pourquoi, avec un =E9diteur hexad=E9cimal, toutes les valeurs soient

Le Tue, 19 Jul 2011 10:26:37 -0700, Jean-Christophe a écrit :

moi-meme a tapoté du bout de ses petites papattes :

JC veut dire qu'en ouvrant un fichier hexa codé ASCII on ne verra que des codes ASCII : donc des chiffres (30 à 39), les lettres de A à F (donc 41 à46 en majuscules ou 61 à 66 en minuscules, selon le codeur) et l'espace (20).

LeLapin

LeLapin a tapoté du bout de ses petites papattes :

J'oubliais CR et LF, le cas échéant.

LeLapin

Le mardi 19 juillet 2011 =C3=A0 21:44 +0200, LeLapin a =C3=A9crit :

ue pourquoi,

caract=C3=A8res de 0 =C3=A0 9=20

en d=C3=A9cimal).

que des=20

F (donc 41 =C3=A046=20

ce (20).

Et DEL, EOT, ACK, NUL et tous les autres non imprimables, non ?

Loïc GRENON a tapoté du bout de ses petites papattes :

Qu'est-ce que ça viendrait foutre dans un fichier hexa affiché en Ascii ?

LeLapin

Le mardi 19 juillet 2011 =C3=A0 22:00 +0200, LeLapin a =C3=A9crit :

ique pourquoi,

x caract=C3=A8res de 0 =C3=A0 9=20

5 en d=C3=A9cimal).

a que des=20

=A0 F (donc 41=20

r) et l'espace=20

en Ascii=20

Qui a dit que c'est *affich=C3=A9* en ASCII ? Perso, je vois les valeurs hexa ... donc c'est affich=C3=A9 en hexa ...

Le mardi 19 juillet 2011 =C3=A0 21:44 +0200, LeLapin a =C3=A9crit :

e pourquoi,

aract=C3=A8res de 0 =C3=A0=20

n d=C3=A9cimal).

e=20

=A0 F=20

odeur)=20

Ok, merci. Mais euh, maintenant, je me demande : quand je passe ce fichier hex au programme de flashage (avrdude), il ne fait que lire b=C3=AAtement ces caract=C3=A8res ASCII et les envoie tels quels au =C2=B5C ou il y a un trai= tement de fait dessus ?

En gros, pour revenir =C3=A0 mon probl=C3=A8me de d=C3=A9part : ma conversi= on 8 bits ->

7 bits, je peux m'en affranchir ou non ?

Merci !

(D=C3=A9sol=C3=A9 si ce message apparait en double mais il n'a pas l'air d'= =C3=AAtre bien pass=C3=A9 ...)

Loïc GRENON a tapoté du bout de ses petites papattes :

Bon, je recommence. Prenons l'exemple des fichiers .hex tels que définis par Intel. Si tu ouvres ton fichier avec le bloc-notes, tu auras un truc du genre : :10246200464C5549442050524F46494C4500464C33

Dans ce format, il n'y a pas d'espace (20). Mais il y a CR LF en fin de ligne, que le bloc-notes interprètera comme un saut de ligne.

Mais si tu l'ouvres avec un éditeur hexadécimal, tu verras :

3A 31 30 32 34 36 32 30 30 34 36 34 43 35 35 34 39... et 13 10 à la fin de la ligne. Capito ?
LeLapin

LeLapin a tapoté du bout de ses petites papattes :

Désolé, on ne le voit pas because c'est interprété par mon newser, mais juste avant le premier chiffre il y a un ":"

LeLapin

Le mardi 19 juillet 2011 =C3=A0 22:17 +0200, LeLapin a =C3=A9crit :

rra que des=20

=C3=A0 F (donc 41=20

eur) et l'espace=20

=A9 en Ascii=20

s

u=20

=20

fin=20

Je sais ce qu'est un code ASCII, merci ;) Mais l=C3=A0, t'es en train de me dire que les fichiers HEX sont compos=C3= =A9s uniquement des caract=C3=A8res ASCII affichables ou j'ai toujours rien compris ?

Loïc GRENON a tapoté du bout de ses petites papattes :

Si ton flasheur sait décoder des fichiers .hex correctement, c'est bon, sinon utilise Hex2Bin :

et tu auras un fichier binaire avec de vrais octets qui se suivent.

J'ai pas très bien compris pourquoi tu voulais convertir de 8 à 7 bits.

LeLapin

Le mardi 19 juillet 2011 =C3=A0 22:24 +0200, Lo=C3=AFc GRENON a =C3=A9crit = :

verra que des=20

=C3=A0 F (donc 41=20

odeur) et l'espace=20

=C3=A9 en Ascii=20

urs

tu=20

=20

a fin=20

=C3=A9s

D'ailleurs, =C3=A7a commence bien par 3A 31 30 mais le reste ne correspond pas et la fin non plus

Loïc GRENON a tapoté du bout de ses petites papattes :

Si tu as tout compris. Un fichier .hex ne contient que des ":", des "0" à "9" et des "A" à "F", et des CR/LF.

LeLapin

Loïc GRENON a tapoté du bout de ses petites papattes :

Evidemment, je te donne juste un exemple ! :D Ouvre ton .hex avec le Bloc-notes et tu verras comment c'est fait.

LeLapin

Le mardi 19 juillet 2011 =C3=A0 22:25 +0200, LeLapin a =C3=A9crit :

traitement

on,=20

Aaaah, =C3=A7a a l'air d'=C3=AAtre une piste :)

ersion 8 bits ->

7 bits.

Parce que je veux faire un bootloader afin de mettre =C3=A0 jour mon appli = en utilisant une interface MIDI et les SySex. Et en MIDI, les messages de donn=C3=A9es sont cod=C3=A9s sur 7 bits, sinon = (si le

8e bit est =C3=A0 1), c'est un message de statut ou syst=C3=A8me.

Loïc GRENON a tapoté du bout de ses petites papattes :

Ben oui mais pour dire à ton device Midi que tu lui envoies des sysex tu dois envoyer un F0 au début et un F7 à la fin, et l'intérieur d'un sysex est en 8 bits (avec parfois le poids fort à 1).

LeLapin

LeLapin a tapoté du bout de ses petites papattes :

Ce qui veut dire que dans le code destiné à ton µC tu n'auras pas le droit d'envoyer un F7... sinon ça fermera ton encapsulation sysex.

LeLapin

LeLapin a tapoté du bout de ses petites papattes :

Si tu utilises un PIC 16, comme je viens de le remarquer, il a son code en 14 bits (2x7 donc), je suppose que c'est fait pour simplifier le téléchargement de code en gardant tout ce qui est >7F pour le contrôle du transfert.

LeLapin

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required