avrdude hex file > 64k

Gast #833700
Lesenswert?

Hallo *,

weiss einer warum der avrdude Intel HEX Files > 64k richtig lesen kann, 
obwohl in der funktion ihex2b die Adressen als unsigned int und damit 
doch 16 bittig deklariert sind?

AVRDUDE5.5

...
static int ihex2b(char * infile, FILE * inf,
             unsigned char * outbuf, int bufsize)
{
  char buffer [ MAX_LINE_LEN ];
  unsigned char * buf;
  unsigned int nextaddr, baseaddr, maxaddr;
  int i;
  int lineno;
  int len;
  struct ihexrec ihex;
  int rc;
...
#833711
Lesenswert?

Ludger wrote:
> Das heisst:
>
> wenn ich unsigned int schreibe wird mit long oder unsigned long oder
> noch etwas anderem gerechnet ?

Per definition ist in C ein int mindestens 16 bit lang, aber auf i386 
und anderen 32 bit Prozessoren ist ein int üblicherweise 32 bit lang.

Die genauen Limits sind in der Headerdatei <limits.h> für die jeweilige 
Umgebung zu finden.

brgds

Thomas
#834015
Lesenswert?

Ludger wrote:
> weiss einer warum der avrdude Intel HEX Files > 64k richtig lesen kann,
> obwohl in der funktion ihex2b die Adressen als unsigned int und damit
> doch 16 bittig deklariert sind?


Das liegt am Aufbau des Hex-Files, jeder Record enthält nur eine 
16Bit-Adresse.
Das Hex-File enthält also die Daten in 64k-Blöcken.

Und diesen Blöcken wird ein Segment-Record vorangestellt der den Offset 
des Blocks enthält.


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren