avr-gcc und flash-groesse

Hoi Olli!

Oliver Joa schrieb:

Hm, steht denn am Ende der Main ein "while(1);"?

t=2E

Naja, in einer (Intel-) Hex-Datei stehen zum einen noch Adressen und anderes Zoichs drin, zum andern sind die Daten in HEX (drum heisst sie wahrscheinlich auch so) abgelegt. Siehe auch

formatting link
Dies f=FChrt dazu, das jedes Datenbyte in einer Hex-Datein 2 Bytes braucht (z.B. 1F).

Verwendest Du AVRGCC? Solange Du nicht dynamisch den RAM verwaltest, kannste da mit size nachschauen.

Gr=FCessli, Edi

Reply to
Eduard Iten
Loading thread data ...

Das was dein Programm sagt ist vermutlich richtig. Das Intel Hex Format hat einen gewissen Overhead. Adressangaben, Zeilenlänge, Prüfsumme etc. sind mit dem eigentlichen Programmcode zusammen gespeichert. Dazu kommt dass es eben HEX ist, also ein Byte Code zwei Byte ASCII Zeichen ergeben.

nicholas

--
> Um die PMPO hochzutreiben sollten aber dann zusätzliche Elkos reichen.
Elkos? Viel zu teuer! Ein Aufkleber reicht völlig.
Dieter Wiedmann in d.s.e
Reply to
Nicholas Preyß

Hi,

ich programmiere gerade an einem atmega16 und bin auf ein komisches Problem gestossen. In der Main Funktion wird ein print auf die Serielle Schnittstelle gemacht, aber nur einmal, wenn das Programm laeuft erscheint er aber wie in einer Schleife. So was aehnliches hatte ich schonmal. Damals lag es daran dass das Programm zu gross war fuer den Flash-Speicher. Wo kann ich eigentlich sehen ob mein Programm zu gross ist. Die .hex-Datei hat 22k, das waere ja eigentlich schon zu viel, da der atmega16 ja nur 16k Flash hat. Beim flashen sagt aber uspi dass er 7k uebertragen hat. Woher kommt der Unterschied und was ist nun richtig?

Das gleiche wuerde mich auch fuer den RAM interessieren. Wo sehe ich wann der voll ist, oder wie sehe ich das? Einfach nur daran dass das Programm nicht richtig laeuft oder staendig resettet?

Danke

Gruss

Olli

Reply to
Oliver Joa

Oliver Joa schrieb:

avr-size program.elf hilft:

#> avr-size -A -x dither.elf dither.elf : section size addr .text 0x100a 0x0 (dein Code) .data 0xfc 0x800060 (initialisierte Daten) .bss 0x223 0x80015c (null-inititialisiere Daten) .eeprom 0x12 0x810000 (ist klar) .stab 0x3084 0x0 (debugging-Info, wird nicht hochgeladen) .stabstr 0x121d 0x0 (debugging-Info, wird nicht hochgeladen) Total 0x55dc

Mehr infos zu den sections gibt's in avr-libc-user-manual-1.4.2/mem_sections.html

Mein avrdude beschwert sich schon beim Hochladen, wenn ich mich recht erinnere.

Gruß Jügen

--
GPG key: 
http://pgp.mit.edu:11371/pks/lookup?search=J%FCrgen+Appel&op=get
Reply to
Jürgen Appel

Hallo,

ich benutze die neuste AVR Studio mit der neusten Version des GCC.

Beim übersetzen wird im Message Fenster die Programmgröße die größe des Data Segments die größe des EEprom Segments angezeigt.

Da mal reinschauen.

Ciao

"Oliver Joa" schrieb im Newsbeitrag news: snipped-for-privacy@j-o-a.de...

Reply to
Günther Kreischer

Wie wird "size"angegeben? In Bytes oder Words? Dazu habe ich nichts gefunden..

--
Uwe Bonnes                bon@elektron.ikp.physik.tu-darmstadt.de

Institut fuer Kernphysik  Schlossgartenstrasse 9  64289 Darmstadt
--------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------
Reply to
Uwe Bonnes

Hoi Uwe!

Uwe Bonnes schrieb:

den.. Ehm... Fangfrage? Wo liegt da bei einem 8-Bit-Prozessor der unterschied?

Gr=FCessli, Edi

Reply to
Eduard Iten

AVR ist nicht von-Neumann. 8bit bezieht sich auf die Datenbus-Breite.

nicholas

--
> Um die PMPO hochzutreiben sollten aber dann zusätzliche Elkos reichen.
Elkos? Viel zu teuer! Ein Aufkleber reicht völlig.
Dieter Wiedmann in d.s.e
Reply to
Nicholas Preyß

Hoi Nicholas

Jo. Und weil der Datenbus 8bit breit ist, ist doch auch ein Word 8 Bit, oder? Oder bin ich da f=F6llig falsch gewickelt?

Gr=FCsse, Edi

Reply to
Eduard Iten

Zwangslaeufig ist da gar nichts.

Deshalb wuerde eine explizite Angabe Klarheit schaffen.

--
Uwe Bonnes                bon@elektron.ikp.physik.tu-darmstadt.de

Institut fuer Kernphysik  Schlossgartenstrasse 9  64289 Darmstadt
--------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------
Reply to
Uwe Bonnes

Eduard Iten schrieb:

Beim AVR wird der Flash-Speicher in 16bit-Worten addressiert, weil das die Länge eines Befehls (RISC) ist. Merkt man an Instruktionen wie LPM (Load Program Memory), das nicht die Byte- sondern die Word-Adresse erwartet.

CU Christian

--
Christian Zietz  -  CHZ-Soft  -  czietz (at) gmx.net
WWW: http://www.chzsoft.com.ar/
PGP/GnuPG-Key-ID: 0x6DA025CA
Reply to
Christian Zietz

Christian Zietz schrieb:

Nö, gerade LPM ist der Beweis, dass der Flash eines AVR nun gerade gar nicht so strikt in 16-bit-Worten organisiert ist: LPM wird (im Gegensatz zum Opcode-Read) in Bytes adressiert.

Die GNU-Tools geben alles in Bytes aus, da das das einzig sinnvolle Maß ist. Oder möchte jemand die RAM-Angaben künftig in 128-bit-Worten haben, nur weil der Datenbus im PC mittlerweile so organisiert ist? ;-)

--
Jörg Wunsch

"Verwende Perl. Shell will man können, dann aber nicht verwenden."
				Kristian Köhntopp, de.comp.os.unix.misc
Reply to
Joerg Wunsch

Hoi G=FCnther

G=FCnther Kreischer schrieb:

Heisst das, das die 4-er version des AVR-Studios endlich wieder mit GCC zusammenarbeitet?

Griessli, Edi

Reply to
Eduard Iten

Joerg Wunsch schrieb:

Grmpf. Man merkt, dass ich die Teile in der letzten Zeit nur in C programmiert habe. Du hast natürlich Recht. Aber die Adressen in Sprungbefehlen, die sind iirc 16-bit-orientiert (was dort ja auch sinnvoll ist).

CU Christian

--
Christian Zietz  -  CHZ-Soft  -  czietz (at) gmx.net
WWW: http://www.chzsoft.com.ar/
PGP/GnuPG-Key-ID: 0x6DA025CA
Reply to
Christian Zietz

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.