Guida richiesto con Intel Hex 32 Format

B

btbass

Guest
Ciao ragazzi, ho bisogno di aiuto per capire come decodificare il record esteso indirizzo lineare in un Intel Hex 32 file formato HEX.Sto scrivendo un barattolo bootloader per il micro dsPIC, Intel Hex 32 formato è quello che il compilatore genera.
Ho letto le informazioni, guardò il file hex, ma per la vita di me, I cant vedere l'indirizzo.HELP!
Quote:

Esteso a 32 bit indirizzo in formato esadecimale è simile al formato esadecimale 8,
salvo che il record esteso indirizzo lineare è uscita anche per stabilire la
16 bit superiori di indirizzo dati.Questo è principalmente usato per 16-bit core
dispositivi in quanto la loro memoria indirizzabile programma supera i 64 Kbyte.

Ogni record di dati inizia con un 9 prefisso carattere e si conclude con un
2-il carattere di checksum.Ogni record è il seguente formato:

: BBAAAATTHHHH .... HHHCC
dove:

BB a due cifre esadecimali numero di byte che rappresenta il numero di byte di dati
che apparirà sulla linea.

AAAA Un indirizzo di quattro cifre esadecimali, che rappresentano l'indirizzo di partenza
il record di dati.

TT Un tipo due cifre record:

00 - record di dati
01 - Fine del record di file
02 - record di indirizzo del segmento
04 - record di indirizzo lineare

HH A due cifre esadecimali byte di dati, presentati in byte basso / byte alto
combinazioni.

CC A due cifre esadecimali che checksum è il complemento a due di
la somma di tutti i byte precedenti nel record.

 
Forse questo potrebbe aiutare:

http://www.precma.it/download/intelhex.pdf
http://www.cs.net/lucid/intel.htm

 
Beh, ora ho letto i seguenti 6 volte, e, err, 4 gemme e un grande comune non ha aiutato, è questo inglese?
Penso che avrò un martini Vodka e andare a letto.

A 32-bit Extended lineare Indirizzo record viene utilizzato per specificare i bit 16-31 della Linear Base Address (LBA), dove i bit 0-15 della LBA sono pari a zero.Bit 16-31 della LBA sono indicati come l'Upper Linear Indirizzo di base (ULBA).
L'indirizzo assoluto in memoria di un byte contenuto in un successivo Dati del record si ottiene con l'aggiunta del LBA a un offset calcolato sommando il campo LOAD OFFSET del contenenti dati record per l'indice del byte del record di dati (0, 1, 2 , ... n).L'aggiunta offset è fatto modulo 4G (cioè, 32-bit), ignorando qualsiasi svolgere, in modo da compensare wrap-around di carico (da OFFFFFFFFH a oooooooooh) risultati in confezione circa dalla fine e l'inizio del discorso 4G lineare definito dalla LBA.L'indirizzo lineare in cui un byte particolare viene caricato è calcolato come segue:
(LBA DRLO DRI) MOD 4G
dove:
DRLO è il campo LOAD OFFSET di un record di dati.
DRI è l'indice di byte di dati all'interno del record di dati.

 
Ho trovato molto utile per guardare i file hex reale per identificare i record Linear Indirizzo ...

C'è un po 'di informazioni in questo tema, sulla Forum.Microchip;

http://forum.microchip.com/tm.asp?m=97196

Regards, Mike

 
Tutto ciò che dice in realtà è di prendere il 16-bit Extended lineare dal tipo di indirizzo del record, e virare davanti a 16-bit standard di indirizzo per ottenere il completo indirizzo di 32 bit del primo byte di dati.

 
Sì, così ho pensato, ma un'occhiata a questo pezzo.

Intel file hex

: 020000040000fa
: 102a00000f80200060ff200000018800000000000f

Programma di memoria

2689 01500 20800F mov.w # 0x800, 0x001e
2690 01502 mov.w 20FF60 # 0xff6, 0x0000
2691 01504 880.100 mov.w 0x0000, 0x0020
2692 01506 000.000 NOP

Se faccio quello che dico ottenere 00002a00
che in binario è 0010 1010 0000 0000

E 'stato messo a 01.500
che in binario è 0001 0101 0000 0000

E 'stato spostato a destra 1 posto?
se lo ha fatto venire?Aggiunto dopo 22 minuti:I think I've got it!
RTFM!
Spazio di memoria del programma è la parola di allineamento e così incrementato di 2.

 
Il <indirizzo> byte in un tipo di 00 "record di dati" sono gli indirizzi BYTE, non gli indirizzi WORD ...

Regards, Mike

 
Mike vero, ma il modo in cui funziona dsPIC è quello di avere tre byte in una posizione di indirizzo.Il codice operativo di istruzioni è di 24 bit.Il contatore viene incrementato dal programma di 2 ogni volta, la LSB del programma è controproducente sempre 0.

 
E 'un modo di gestire parola affrontare.In questo caso, se si avvalgono di byte di indirizzamento per il codice esadecimale.Il codice reale utilizza parola affrontare, per cui vi è una traduzione tra i byte "" l'indirizzo e la parola (istruzione) l'indirizzo.

 

Welcome to EDABoard.com

Sponsor

Back
Top