Forum: Mikrocontroller und Digitale Elektronik HEX-File passt nicht in Attiny 25


von Stefan K (Gast)


Angehängte Dateien:

Lesenswert?

Guten Tag Gemeinde,

der folgende Exkurs ist etwas länger aber ich möchte direkt alle Infos 
liefern:
da mein neuer Router kein Impulswahlverfahren mehr versteht, ich meine 
W48 aber weiter nutzen möchte benötige ich einen Konverter Impulswahl zu 
Tonwahl. Dieser soll einen Nummernspeicher besitzen, damit ich die 
Apparate auch mal benutze wenn ich zu faul zum Wählen bin oder die 
Nummer gerade mal nicht auswendig kenne. In Assembler für die 8-Bit AVRs 
kenne ich mich ganz passabel aus, doch habe ich wegen der Sanierung 
meines Hauses gerade keine Zeit da mal 10, 20 oder mehr Stunden Zeit zu 
investieren um einen lauffähigen Code auszubrüten.
(Ich kann telefonieren, es befindet sich noch ein "moderneres" Telefon 
im Haus)
So habe ich das WWW nach Entsprechendem abgesucht aber nur einen 
passenden Code in C gefunden.
Komme ich nun zur Sache:
Mit C kann ich fast nichts anfangen und wegen o.a. habe ich auch keine 
Zeit mich da JETZT etwas einzuarbeiten. Allerdings gelang es mir nach 
langem Einreden auf: AVR-Studio 4.14 , AVR-GCC 1.0.0.9 das C-File zu 
compilieren und eine HEX-File zu generieren.
Leider weigert sich das Atmel-Studio (mit einem Dragon als 
Programmieradapter) das File in den Attiny 25 zu laden.
Fehlermeldung: "The contents of the HEX File does not fit in the 
selected device"
Die Datei ist nur 1,6 KB groß und der Tiny zu 60% damit gefüllt.
Das hat sicher etwas mit den vorletzten 5 Zeilen des HEX-Files zu tun.
Wo kommen die her?
Was kann ich machen?
Von meinen Assemblerprojekten kenne ich das nicht.
Wenn ich als Device im AVR-Studio größere (auch viel größere) Controller 
angebe, kommt immer wieder die gleiche Fehlermeldung.
Um einen Denkanstoß wäre ich froh.
Danke

PS.: nein, ich kaufe keine alte analoge Telefonanlage um den gleichen 
Zweck zu erreichen und Kommentare zu dem Code bitte nicht an mich sonder 
an den Programmierer.

von Peter II (Gast)


Lesenswert?

am ende vom make kommt doch die Ausgabe, wie groß das Programm ist. Was 
steht dort?

von Stefan K (Gast)


Lesenswert?

Hallo Peter,
da steht: program 1420 Byte (69,3% full) sowie
data 24 Bytes (18,8% full)

von Max D. (max_d)


Lesenswert?

Tiny 45 oder 85 nehmen...

von Fritz Katze (Gast)


Lesenswert?

$(PROJECT).elf: telefonadapter.c
  $(COMPILE) -o $@ $<

Hier compilierst und linkst Du ja in einem Schritt.
Vielleicht kannst Du den Linker ja mal eine Map-File erstellen lassen.
Da stehen dann auch evtl. Informationen über zusätzliche Segmente 
(static, stack etc.) und deren Mindestgrößen drin. Sollte aber auch im 
Nachhinein mit avr-objdump zu erkennen sein.

Dann kann man versuchen, mit den passenden Linker-Flags die störenden 
Segmente klein zu kriegen.

Vielleicht schaust Du mal, was AVR-Studio so macht, wenn der Tiny das 
Target ist...

von Stefan K (Gast)


Lesenswert?

Max D. schrieb:
> Tiny 45 oder 85 nehmen...

probiert, geht gleiches Verhalten
Mega 8 bis 64 probiert, gleiches Verhalten

von Stefan K (Gast)


Lesenswert?

Fritz Katze schrieb:
> $(PROJECT).elf: telefonadapter.c
>   $(COMPILE) -o $@ $<
>
> Hier compilierst und linkst Du ja in einem Schritt.
> Vielleicht kannst Du den Linker ja mal eine Map-File erstellen lassen.
> Da stehen dann auch evtl. Informationen über zusätzliche Segmente
> (static, stack etc.) und deren Mindestgrößen drin. Sollte aber auch im
> Nachhinein mit avr-objdump zu erkennen sein.
>
> Dann kann man versuchen, mit den passenden Linker-Flags die störenden
> Segmente klein zu kriegen.
>
> Vielleicht schaust Du mal, was AVR-Studio so macht, wenn der Tiny das
> Target ist...

Hallo Fritz,

was du da schreibst geht schon über mein "C-Wissen" hinaus.
Kann ich leider nicht umsetzen.

von Peter II (Gast)


Lesenswert?

Stefan K schrieb:
> Hallo Peter,
> da steht: program 1420 Byte (69,3% full) sowie
> data 24 Bytes (18,8% full)

merkwürdig, sollte also passen

hast du es mal mit avrdude versucht zu flashen?

von Oliver S. (oliverso)


Lesenswert?

Deine toolchain klingt komisch. Hast du es mal mit WinAVR (lezte Version 
von 2010...) probiert?

Oliver

von Axel S. (a-za-z0-9)


Lesenswert?

Stefan K schrieb:
> Leider weigert sich das Atmel-Studio (mit einem Dragon als
> Programmieradapter) das File in den Attiny 25 zu laden.
> Fehlermeldung: "The contents of the HEX File does not fit in the
> selected device"

Das ist offensichtlich falsch. Das Atmel-Studio spinnt.

Vermutlich(?) kommt es nicht damit klar, daß die Fuse-Bytes mit im .HEX 
stehen. Verwende besser eine aktuelle Version von AVRdude, die direkt 
das .elf File lesen kann.

von Stefan K (Gast)


Lesenswert?

Oliver S. schrieb:
> Deine toolchain klingt komisch. Hast du es mal mit WinAVR (lezte
> Version
> von 2010...) probiert?
>
> Oliver

Hallo oliver,

ich habe WinAVR-20100110 installiert um den C-Code zu compilieren.
Vorher konnte ich im Atmel-Studio keinen C-Code compilieren.
Ist AVR-GCC etwas anders?
Wie gesagt ich habe praktisch keinen Plan von C und der Toolchain.
Ich versuche gerade als Nichtschwimmer das andere Ufer zu erreichen, 
dessen bin ich mir bewußt :-)

@ Peter: avrdude kenne ich nicht. Ist das ein anderes Programm zum 
Flashen?
Ich habe mal gelernt: nie an zwei Baustellen gleichzeitig arbeiten und 
das wäre mit avrdude dann der Fall.

von Peter II (Gast)


Lesenswert?

du kannst ja einfach mal die letzen 6 Zeilen aus dem hex löschen.

von Stefan K (Gast)


Lesenswert?

Axel S. schrieb:
> Vermutlich(?) kommt es nicht damit klar, daß die Fuse-Bytes mit im .HEX
> stehen. Verwende besser eine aktuelle Version von AVRdude, die direkt
> das .elf File lesen kann.

Hallo Axel,

jetzt wo du es sagst dass die FuseBytes im HEX-File stehen sehe ich die 
auch dort.
Ich habe sie aus dem C-Code mal entfernt (die kann ich schliesslich auch 
händisch setzen, begreife im Moment noch nicht, was die im Programmcode 
zu suchen haben) und nun bleiben nur noch die letzten beiden Zeilen im 
HEX-File unverständlich.
Atmel-Studio meckert daher weiter ein zu großes File an.

von Michael U. (amiga)


Lesenswert?

Hallo,

kannst mal das komplette Studio-Projekt hier anhängen?
Einfach den kompletten Projekt-Ordner packen.

Ich nutze hier noch Stdio 4.18 mit WinAVR-20100110 und einen Dragon 
hätte ich auch noch zum Test.

Wobei mir Dein 4.14er Studio doch etwas alt vorkommt.

Gruß aus Berlin
Michael

von Stefan K (Gast)


Lesenswert?

Peter II schrieb:
> du kannst ja einfach mal die letzen 6 Zeilen aus dem hex löschen.

Ich habe die vorletzten 5 Zeilen (die letzte Zeile habe ich mal 
gelassen) gelöscht und jetzt passt das File in den Controller. Ob der 
Code funktioniert kann ich mangels passender Hardware zur Zeit noch 
nicht beurteilen. Was mir der Compiler/Linker oder wasweisich da hinten 
alles ausser Fuses noch ins HEX schreibt bleibt mir zunächst unklar.

Vielen dank bis hierhin.

von Stefan K (Gast)


Angehängte Dateien:

Lesenswert?

Für Michael

von Frickelfritze (Gast)


Lesenswert?

Stefan K schrieb:
> Atmel-Studio

Bitte aufpassen bei den Bezeichnungen

Version bis 4.19:  --> AVR Studio
Version 5.xx bis 7.xx (heute):  --> ATMEL Studio

Sonst weiss man icht genau wovon du sprichst.

Ich würde auch die AVR Studio Version 4.18 empfehlen .....

von spess53 (Gast)


Lesenswert?

Hi

>Ich habe die vorletzten 5 Zeilen (die letzte Zeile habe ich mal
>gelassen) gelöscht und jetzt passt das File in den Controller.

Wieso 5 Zeilen? Die Zeile

:0C058000739478947ADEF3CFF894FFCFE8

gehört noch zum Programm.

MfG Spess

von Axel S. (a-za-z0-9)


Lesenswert?

Stefan K schrieb:
> Axel S. schrieb:
>> Vermutlich(?) kommt es nicht damit klar, daß die Fuse-Bytes mit im .HEX
>> stehen. Verwende besser eine aktuelle Version von AVRdude, die direkt
>> das .elf File lesen kann.
>
> jetzt wo du es sagst dass die FuseBytes im HEX-File stehen sehe ich die
> auch dort.
> Ich habe sie aus dem C-Code mal entfernt (die kann ich schliesslich auch
> händisch setzen, begreife im Moment noch nicht, was die im Programmcode
> zu suchen haben)

Die stehen im Programmcode, weil das Programm auf die korrekt gesetzten 
Fuses angewiesen ist. Und wenn sie im Programm stehen, dann kann man 
nicht vergessen, sie händisch zu setzen. Im Prinzip ist das eine sehr 
gute Sache, die eine Fehlerquelle eliminiert. Man darf nur nicht eine 
ranzige alte Toolchain benutzen, die damit nicht klar kommt. Wie bereits 
gesagt: nimm avrdude zu flashen, damit geht das.

Stefan K schrieb:
> nun bleiben nur noch die letzten beiden Zeilen im
> HEX-File unverständlich.

Das dürften die Signatur-Bytes sein.

Aus dem Makefile:
1
%.hex: $(PROJECT).elf
2
        avr-objcopy -j .text -j .data -j .fuse -j .signature -O ihex $< $@

Hier werden explizit die Sektionen .fuse und .signature in das .hex 
übernommen.

von Stefan K (Gast)


Lesenswert?

An alle, vielen Dank es ist für mich etwas Licht ins Dunkel gekommen.
Viel Input, den es für mich noch zu ver- und erarbeiten gilt.
Wenn ich statt des HEX-Files das erzeugt telefonadapter.elf als 
Brennanweisung nutze funktioniert alles bestens.
Nochmals danke.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.