PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : avr-gcc: compilieren & hex



Benedikt.Seidl
06.05.2006, 12:34
hallo

ich hoffe ich geh euch nicht zu sehr auf den senkel mit einer erneuten anfänger frage,.. bin allerdings schon ganz schon stolz auf mich :? dass ich es bis hier her geschafft habe,... die verbindung von mac und atmega16 steht schon mal. (ich kann mit uisp die fusebits auslesen)

jetzt komm ich zum nächsten problem: code rüber schieben.

ich habe mir da für den anfang ein möglichst einfaches beispiel ausgesucht, dass ich es noch einigermaßen verstehen kann:

#define F_CPU 10000000UL
#include <avr/io.h>
#include <avr/delay.h>

void delayms(uint16_t millis) {
uint16_t loop;
while ( millis ) {
_delay_ms(1);
millis--;
}
}

int main(void) {
DDRB |= 1<<PB0; /* set PB0 to output */
while(1) {
PORTB &= !(1<<PB0); /* LED on */
delayms(100);
PORTB |= 1<<PB0; /* LED off */
delayms(900);
}
return 0;
}
(geklaut von hier (http://paul.graysonfamily.org/thoughts/avrlinux/))

auf der hompage von der ich den code geklaut habe, wäre auch ein makefile. ich habe aber hier irgendwo mal gelesen, dass makefiles für den anfang nix sind, weil das auch nur noch eine zusätzliche fehlerquelle wäre.

es gibt ja im wissensbereich auch einen artikel (https://www.roboternetz.de/wissen/index.php/Hallo_Welt_für_AVR_%28LED_blinken%29) dazu. jedoch ist das da mit den mehreren dateien und interrupts so kompliziert, dass ich überhaupt gar nicht verstehen kann wie es funktioniert. das würde ich aber schon gerne.

ich denke es wäre für euch ein leichtes mir die benötigeten schritte im terminal/bash zu zeigen. software sollte schon alles vorhanden sein (avr-gcc, uisp bzw. avrdude) und darum möchte ich euch auch bitten.

das gigantische AVR GCC Tutorial (http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial) war ich auch schon, da wird das aber auch nur mit makefiles gemacht.

recht herzlichen dank

SEIDL.

SprinterSB
06.05.2006, 13:51
...und was ist deine Frage???

Wie amn eine C-Datei kompiliert? Bei dem Beispiel, das du angegeben hast, wird das erläutert und was man da eintippen muss. Und zwar ohne make. Es ist auch eine Version abgedruckt, die die Quelle nicht auf 2 Dateien aufteilt sindern alles in einer Datei hat (Der Abschnitt heisst auch so). Die Quellen sind erklärt und zusätzlich kommentiert. Die Basis-Grundlagen, die im Handbuch zu finden sind, werden allerdings nicht wiederholt.

Benedikt.Seidl
06.05.2006, 14:06
Bei dem Beispiel, das du angegeben hast, wird das erläutert und was man da eintippen muss. Und zwar ohne make.
du meinst bei diesem (http://paul.graysonfamily.org/thoughts/avrlinux/) beispiel? ich habe es jetzt zum 3. mal angeschaut,.. kann nix finden


Es ist auch eine Version abgedruckt, die die Quelle nicht auf 2 Dateien aufteilt sindern alles in einer Datei hat (Der Abschnitt heisst auch so).
oh damn! ich habe gewusst, dass es diesen abschnitt gibt, aber dass das da nochmal erklärt wird habe ich irgendwie überlesen.

dankeschön für den hinweis!

SEIDL.

Razer
06.05.2006, 22:45
Hallo

Muss es nicht PORTB &= ~(1 << PB0) heißen?

Benedikt.Seidl
08.05.2006, 16:49
hallo

ich habe jetzt noch mal ein problem:
ich habe den code von diesem thread (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=19058) genommen und in die datei arg.c gepackt. nachdem avr-gcc ein bisschen gemeckert habe, habe ich noch ein define hinzugefügt und den pfad für delay.h geändert. das ganze sieht jetzt so aus:


#include <avr/io.h>
#define F_CPU 10000000UL
#include <util/delay.h>

void warte(int loop) //loop: wartezeit in ms
{
int i;
for(i=0;i<loop;i++) _delay_ms(1);
}

int main(void)
{
DDRC = 0xFF;
DDRB = 0xFF;
DDRA = 0xFF;

for (;;)
{
PORTB = 0xFF;
PORTA = 0xFF;
PORTC = 0xFF;
warte(400);
PORTB = 0x00;
PORTA = 0x00;
PORTC = 0x00;
warte(400);
}
}


wenn ich das jetzt compelliere mit

avr-gcc arg.c -o arg.hex -mmcu=atmega16 -g -Os -Wl,--oformat=ihex

kommt das hier raus:


:100000003694000051940000519400005194000077
:10001000519400005194000051940000519400004C
:10002000519400005194000051940000519400003C
:10003000519400005194000051940000519400002C
:10004000519400005194000051940000519400001C
:0400500051940000C7
:0C00540011241FBE1FE5D4E0DEBFCDBFAD
:10006000106000E1B060BEE5F4E002C005900D92C2
:060070000031B107D9F7D1
:10007600106000E1B06001C01D920031B107E1F7E8
:040086008E94000054
:04008A000C940000D2
:10008E00EF92FF920F931F93CF93DF9318161906DB
:10009E005CF5EC010F2EF0E0EF2EF0E4FF2EFCE10C
:1000AE000F2FF5E41F2FF02D20E030E040E85FE346
:1000BE00C801B701E694000088231CF481E090E0AB
:1000CE000FC020E03FEF4FE757E4C801B701A894F7
:1000DE00000018161CF480E090E002C084EC99E059
:1000EE000197F1F72197B1F6DF91CF911F910F9103
:1000FE00FF90EF9008951FE5D4E0DEBFCDBF8FEFE8
:10010E0084BB87BB8ABB8FEF88BB8BBB85BB80E96B
:10011E0091E05594000018BA1BBA15BA80E991E027
:06012E0055940000F0CF23
:10013400A8E1B0E080E1F0E052960000DC01CB01E0
:10014400898B9A8BAB8BBC8B2D8B3E8B4F8B588FB3
:10015400BE016F5F7F4FCE014196249500008E0152
:10016400075F1F4FB801CE0145962495000020E09B
:1001740030E08981823008F421E02115310539F419
:100184008985823010F421E030E0232B19F08FEFC1
:100194009FEF08C0B801CE010196989500009927F9
:0C01A40087FD9095E4E068966E960000E0
:1001B000A8E1B0E0BEE1F0E052960000DC01CB0126
:1001C000898B9A8BAB8BBC8B2D8B3E8B4F8B588F37
:1001D000BE016F5F7F4FCE014196249500008E01D6
:1001E000075F1F4FB801CE0145962495000020E01F
:1001F00030E08981823008F421E02115310539F49D
:100200008985823010F421E030E0232B19F081E061
:1002100090E008C0B801CE0101969895000099279A
:0C02200087FD9095E4E068966E96000063
:10022C00FC01DB01408151812281622F6F7770E0EC
:10023C00221F2227221F9381892F880F822B282F80
:10024C003327991F9927991F11969C931197211564
:10025C003105B9F5411551056105710519F482E0B7
:10026C008C9308952E57304012962D933C931397F0
:10027C00E7E0440F551F661F771FEA95D1F783E01F
:10028C008C934030F0E05F07F0E06F07F0E47F07FD
:10029C0090F4C901440F551F661F771F019740301A
:1002AC0020E0520720E0620720E4720798F31296D0
:1002BC008D939C931397FD014483558366837783B9
:1002CC0008952F3F310591F02F573040FD011296C4
:1002DC002D933C93139783E08C9387E0440F551F29
:1002EC00661F771F8A95D1F77064E6CF41155105CB
:1002FC006105710511F484E0B3CF64FF03C081E0A4
:08030C008C93D9CF1C92D7CFCE
:10031400A0E0B0E070E2F1E04F960000FC01DB01E8
:1003240080E090E04081423008F481E0009739F4A5
:100334005C91523010F481E090E0009719F061E094
:1003440070E08EC09C01443009F487C0232B69F00F
:10035400543009F47FC0892B41F011968C91682F99
:1003640077278181681B71097BC080E090E044306D
:1003740009F46DC0009749F5543009F465C000973D
:10038400A1F49C01423009F45CC0232B39F09C0198
:10039400523009F453C0232B09F047C080E090E0A9
:1003A400423009F448C0009759F011968C91882383
:1003B40021F48FEF9FEFBC0153C081E090E0FBCFAD
:1003C4009C015230A9F1232B21F08181882389F7E4
:1003D400F4CFD18011968C911197D81619F0DD20A5
:1003E40041F7EBCF4281538112968D919C911397E3
:1003F40084179507A4F348175907A4F0E480F580FF
:100404000681178114964D915D916D917C9117979A
:100414004E155F056007710710F3E416F50606072D
:10042400170718F4DD2029F2C8CF60E070E018C087
:1004340021E030E0C8CF81E090E0B5CF21E030E0AA
:10044400AACF21E030E0A1CF81E090E098CF81E015
:1004540090E090CF81E090E07ECF21E030E076CF55
:0C046400CB01E7E0CDB7DEB76B960000DF
:100470002F923F924F925F926F927F928F929F92B4
:10048000AF92BF92CF92DF92EF92FF920F931F93A2
:10049000CF93DF93CDB7DEB7CA1BDB0B0FB6F89453
:0804A000DEBF0FBECDBF0994C1
:1004A8002A88398848885F846E847D848C849B84FC
:1004B800AA84B984C884DF80EE80FD800C811B810A
:1004C800AA81B981CE0FD11D0FB6F894DEBF0FBE39
:0604D800CDBFED01089507
:00000001FF


und das schaut halt irgendwie gar nicht so aus, wie das aus dem thread von oben. macht nix dachte ich mir, ich probier es trotzdem auf den atmega16 zu laden.

uisp -dprog=avr910 -dserial=/dev/tty.usbserial -dpart=M16 --upload if=arg.hex

dabei meldet er:


Programmer Information:
Software Version: 3.1, Hardware Version: 1.0

Atmel AVR ATmega16 is found.
Uploading: flash


ok. dann muss ich das ja noch verifyn mit:

uisp -dprog=avr910 -dserial=/dev/tty.usbserial -dpart=M16 --verify if=arg.hex

und dann meldet er:


Programmer Information:
Software Version: 3.1, Hardware Version: 1.0

Atmel AVR ATmega16 is found.
Verifying: flash
flash error at address 0x0: file=0x36, mem=0x04
flash error at address 0x4: file=0x51, mem=0x00
flash error at address 0x8: file=0x51, mem=0x00
flash error at address 0xc: file=0x51, mem=0x00
flash error at address 0x10: file=0x51, mem=0x00
flash error at address 0x14: file=0x51, mem=0x00
flash error at address 0x18: file=0x51, mem=0x00
flash error at address 0x1c: file=0x51, mem=0x00
flash error at address 0x20: file=0x51, mem=0x00
flash error at address 0x24: file=0x51, mem=0x00
flash error at address 0x28: file=0x .......
(mit ner viel längeren liste flash errors.)

was auch noch komisch ist: ich habe es auch schon mal mit dem hex code von dem thread von oben probiert. dann hat die led mal geblinkt. jetzt funktioniert es aber nicht mehr,.. es kommen auch wieder flash errors. mit zwischendurch löschen habe ich es auch schon probiert,.. leider negativ

was mach ich falsch?

dankeschön

SEIDL. einerseits hoffend, dass es dieses mal ein richtiges problem ist (und ich nicht nur zu doof zum lesen bin), anderseits hoffend, dass es sich so leicht lösen lässt wie das erste

SprinterSB
08.05.2006, 19:26
Egal, ob das Prog abstürztz (bzw abstürzen würde) oder funktioniert(e), dürfte es beim Proggen keine Fehler geben. Mit dem Programmcode selbst kann das eigentlich nichts zu tun haben.

Das hex-File sieht jedenfalls nicht gut aus. Scheinbar sind da noch debug-Informationen drinne...

Versuch mal den Standard-Weg über elf32-avr anstatt ihex:



avr-gcc .... -o arg.elf (ohne -Wl...)
avr-objcopy -j .text -j .data -O ihex arg.elf arg.hex
avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O ihex arg.elf arg-eeprom.hex

Benedikt.Seidl
08.05.2006, 20:05
ok. der hex code sieht jetzt so aus:


:100000000C942A000C9445000C9445000C94450077
:100010000C9445000C9445000C9445000C9445004C
:100020000C9445000C9445000C9445000C9445003C
:100030000C9445000C9445000C9445000C9445002C
:100040000C9445000C9445000C9445000C9445001C
:100050000C94450011241FBECFE5D4E0DEBFCDBF18
:1000600010E0A0E6B0E0EEEDF4E002C005900D92E5
:10007000A036B107D9F710E0A0E6B0E001C01D92AC
:10008000A036B107E1F70C9482000C940000EF92C7
:10009000FF920F931F93CF93DF93181619065CF509
:1000A000EC010F2EF0E0EF2EF0E4FF2EFCE10F2F1D
:1000B000F5E41F2FF02D20E030E040E85FE3C801B9
:1000C000B7010E94D80088231CF481E090E00FC0A3
:1000D00020E03FEF4FE757E4C801B7010E949A00C4
:1000E00018161CF480E090E002C084EC99E00197BF
:1000F000F1F72197B1F6DF91CF911F910F91FF900A
:10010000EF900895CFE5D4E0DEBFCDBF8FEF84BB85
:1001100087BB8ABB8FEF88BB8BBB85BB80E991E037
:100120000E94470018BA1BBA15BA80E991E00E94F4
:100130004700F0CFA8E1B0E0E0EAF0E00C9446021E
:10014000DC01CB01898B9A8BAB8BBC8B2D8B3E8BCF
:100150004F8B588FBE016F5F7F4FCE0141960E943B
:1001600016018E01075F1F4FB801CE0145960E9410
:10017000160120E030E08981823008F421E0211569
:10018000310539F48985823010F421E030E0232BE9
:1001900019F08FEF9FEF08C0B801CE0101960E94C1
:1001A0008A01992787FD9095E4E068960C94620295
:1001B000A8E1B0E0EEEDF0E00C944602DC01CB01EA
:1001C000898B9A8BAB8BBC8B2D8B3E8B4F8B588F37
:1001D000BE016F5F7F4FCE0141960E9416018E01D6
:1001E000075F1F4FB801CE0145960E94160120E01F
:1001F00030E08981823008F421E02115310539F49D
:100200008985823010F421E030E0232B19F081E061
:1002100090E008C0B801CE0101960E948A0199279A
:1002200087FD9095E4E068960C946202FC01DB0186
:10023000408151812281622F6F7770E0221F222737
:10024000221F9381892F880F822B282F3327991FF4
:100250009927991F11969C93119721153105B9F58E
:10026000411551056105710519F482E08C930895DB
:100270002E57304012962D933C931397E7E0440F8E
:10028000551F661F771FEA95D1F783E08C934030A6
:10029000F0E05F07F0E06F07F0E47F0790F4C9013A
:1002A000440F551F661F771F0197403020E052070B
:1002B00020E0620720E4720798F312968D939C93D6
:1002C0001397FD01448355836683778308952F3FF9
:1002D000310591F02F573040FD0112962D933C933C
:1002E000139783E08C9387E0440F551F661F771F99
:1002F0008A95D1F77064E6CF411551056105710506
:1003000011F484E0B3CF64FF03C081E08C93D9CFB4
:100310001C92D7CFA0E0B0E0E0E9F1E00C944302FA
:10032000FC01DB0180E090E04081423008F481E094
:10033000009739F45C91523010F481E090E000971E
:1003400019F061E070E08EC09C01443009F487C070
:10035000232B69F0543009F47FC0892B41F01196AA
:100360008C91682F77278181681B71097BC080E0A1
:1003700090E0443009F46DC0009749F5543009F419
:1003800065C00097A1F49C01423009F45CC0232BA6
:1003900039F09C01523009F453C0232B09F047C0B7
:1003A00080E090E0423009F448C0009759F011967F
:1003B0008C91882321F48FEF9FEFBC0153C081E023
:1003C00090E0FBCF9C015230A9F1232B21F08181D9
:1003D000882389F7F4CFD18011968C911197D81684
:1003E00019F0DD2041F7EBCF4281538112968D91B8
:1003F0009C91139784179507A4F348175907A4F005
:10040000E480F5800681178114964D915D916D9180
:100410007C9117974E155F056007710710F3E4167E
:10042000F5060607170718F4DD2029F2C8CF60E0AB
:1004300070E018C021E030E0C8CF81E090E0B5CF97
:1004400021E030E0AACF21E030E0A1CF81E090E0D0
:1004500098CF81E090E090CF81E090E07ECF21E0E6
:1004600030E076CFCB01E7E0CDB7DEB70C945F028A
:100470002F923F924F925F926F927F928F929F92B4
:10048000AF92BF92CF92DF92EF92FF920F931F93A2
:10049000CF93DF93CDB7DEB7CA1BDB0B0FB6F89453
:1004A000DEBF0FBECDBF09942A88398848885F8493
:1004B0006E847D848C849B84AA84B984C884DF8004
:1004C000EE80FD800C811B81AA81B981CE0FD11DE8
:0E04D0000FB6F894DEBF0FBECDBFED0108954C
:00000001FF


allerdings kommen immer noch die gleichen fehler.
daran, dass ich den programmer zwischen upload und verify abstecke kann es aber nicht liegen? (mein usb-rs232 adapter ist nicht so der aller beste)

jetzt kommt nochmal eine doofe frage: was mach ich denn mit dem eeprom file?

könnte es was helfen, wenn ich den seriellen port langsamer mache?

habe jetzt noch ein bisschen getestet (ohne langsamer machen) die hex file, die ich mir aus dem thread kopiert habe, nimmt er inzwischen ohne murren,.. meine leider nicht.

danke!

SEIDL.

johannuhrmann
09.05.2006, 07:25
Muss es nicht PORTB &= ~(1 << PB0) heißen?


Ja, muss es!
Wenn der Operator ! dasselbe machen sollte, dann ist das Zufall.

Grüße,

Hans

SprinterSB
09.05.2006, 13:03
Kiene Ahnung, woher das kommt... :-k

Bei mir sieht das eintsprechende aus arg.c erzeugte ihex so aus (gcc 3.4.x):


:100000000C942A000C9445000C9445000C94450077
:100010000C9445000C9445000C9445000C9445004C
:100020000C9445000C9445000C9445000C9445003C
:100030000C9445000C9445000C9445000C9445002C
:100040000C9445000C9445000C9445000C9445001C
:100050000C94450011241FBECFE5D4E0DEBFCDBF18
:1000600010E0A0E6B0E0ECEEF0E002C005900D92EA
:10007000A036B107D9F710E0A0E6B0E001C01D92AC
:10008000A036B107E1F70C945E000C940000CF930A
:10009000DF93AC0120E030E02817390764F4A4ECCA
:1000A000B9E0C0E0D0E0CD010197F1F72F5F3F4FFD
:1000B00024173507C4F3DF91CF910895CFE5D4E03D
:1000C000DEBFCDBF8FEF84BB87BB8ABB8FEF88BB02
:1000D0008BBB85BB80E991E00E94470018BA1BBA30
:0C00E00015BA80E991E00E944700F0CFC3
:00000001FF


Deines ist ja megamässig viel grösser und es steht immer noch sehr seltsames Zeug drinne...

Des eeprom-File brauchst du (noch) nicht, weil du keine Daten ins eeprom lokatiert hast.

Benedikt.Seidl
11.05.2006, 16:06
hallo nochmal,..

ich nehme an, dass, wenn solange niemand antwortet, keine hoffnung auf eine lösung besteht?!

ich werde es über das wochenende mit einem andern computer probieren, ich weiß ja jetzt was ich alles installieren muss, und wie.

danke für die hilfe!

SEIDL.

SprinterSB
11.05.2006, 23:21
Hast du wirklich versucht über elf zu gehen? Direkt nach ihex ist auch aus anderen gründen nicht zu empfehlen. Wozu hast du überhaupt -g an? Aus einem ihex kannste eh nicht debuggen...

Benedikt.Seidl
12.05.2006, 06:21
Hast du wirklich versucht über elf zu gehen? Direkt nach ihex ist auch aus anderen gründen nicht zu empfehlen.
ja.
das hier gebe ich ein:
$ avr-gcc arg.c -o arg.elf -mmcu=atmega16 -Os
$ avr-objcopy -j .text -j .data -O ihex arg.elf arg.hex


Wozu hast du überhaupt -g an? Aus einem ihex kannste eh nicht debuggen...
das steht so in dem artikel (https://www.roboternetz.de/wissen/index.php/Hallo_Welt_für_AVR_%28LED_blinken%29): > avr-gcc blinky-all.c -o blinky-all.elf -mmcu=atmega32 -g -Os
habe es jetzt weggelassen und habe nochmal ein ihex draus gemacht. ist aber immer noch sooo lang

SEIDL.

johannuhrmann
12.05.2006, 17:01
> avr-gcc blinky-all.c -o blinky-all.elf -mmcu=atmega32 -g -Os


Ich dachte, Du hast einen ATMega16 und keinen ATMega32...

Hans

SprinterSB
12.05.2006, 17:01
hmmm
Das elf sieht bei mir so aus:

avr-gcc arg.c -o arg.elf -mmcu=atmega16 -Os
avr-objdump -d arg.elf


arg.elf: file format elf32-avr

Disassembly of section .text:

00000000 <__vectors>:
0: 0c 94 2a 00 jmp 0x54 <__ctors_end>
4: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
8: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
10: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
14: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
18: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
1c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
20: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
24: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
28: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
2c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
30: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
34: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
38: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
3c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
40: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
44: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
48: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
4c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
50: 0c 94 45 00 jmp 0x8a <__bad_interrupt>

00000054 <__ctors_end>:
54: 11 24 eor r1, r1
56: 1f be out 0x3f, r1 ; 63
58: cf e5 ldi r28, 0x5F ; 95
5a: d4 e0 ldi r29, 0x04 ; 4
5c: de bf out 0x3e, r29 ; 62
5e: cd bf out 0x3d, r28 ; 61

00000060 <__do_copy_data>:
60: 10 e0 ldi r17, 0x00 ; 0
62: a0 e6 ldi r26, 0x60 ; 96
64: b0 e0 ldi r27, 0x00 ; 0
66: ec ee ldi r30, 0xEC ; 236
68: f0 e0 ldi r31, 0x00 ; 0
6a: 02 c0 rjmp .+4 ; 0x70 <.do_copy_data_start>

0000006c <.do_copy_data_loop>:
6c: 05 90 lpm r0, Z+
6e: 0d 92 st X+, r0

00000070 <.do_copy_data_start>:
70: a0 36 cpi r26, 0x60 ; 96
72: b1 07 cpc r27, r17
74: d9 f7 brne .-10 ; 0x6c <.do_copy_data_loop>

00000076 <__do_clear_bss>:
76: 10 e0 ldi r17, 0x00 ; 0
78: a0 e6 ldi r26, 0x60 ; 96
7a: b0 e0 ldi r27, 0x00 ; 0
7c: 01 c0 rjmp .+2 ; 0x80 <.do_clear_bss_start>

0000007e <.do_clear_bss_loop>:
7e: 1d 92 st X+, r1

00000080 <.do_clear_bss_start>:
80: a0 36 cpi r26, 0x60 ; 96
82: b1 07 cpc r27, r17
84: e1 f7 brne .-8 ; 0x7e <.do_clear_bss_loop>
86: 0c 94 5e 00 jmp 0xbc <main>

0000008a <__bad_interrupt>:
8a: 0c 94 00 00 jmp 0x0 <__vectors>

0000008e <warte>:
8e: cf 93 push r28
90: df 93 push r29
92: ac 01 movw r20, r24
94: 20 e0 ldi r18, 0x00 ; 0
96: 30 e0 ldi r19, 0x00 ; 0
98: 28 17 cp r18, r24
9a: 39 07 cpc r19, r25
9c: 64 f4 brge .+24 ; 0xb6 <warte+0x28>
9e: a4 ec ldi r26, 0xC4 ; 196
a0: b9 e0 ldi r27, 0x09 ; 9
a2: c0 e0 ldi r28, 0x00 ; 0
a4: d0 e0 ldi r29, 0x00 ; 0
a6: cd 01 movw r24, r26
a8: 01 97 sbiw r24, 0x01 ; 1
aa: f1 f7 brne .-4 ; 0xa8 <warte+0x1a>
ac: 2f 5f subi r18, 0xFF ; 255
ae: 3f 4f sbci r19, 0xFF ; 255
b0: 24 17 cp r18, r20
b2: 35 07 cpc r19, r21
b4: c4 f3 brlt .-16 ; 0xa6 <warte+0x18>
b6: df 91 pop r29
b8: cf 91 pop r28
ba: 08 95 ret

000000bc <main>:
bc: cf e5 ldi r28, 0x5F ; 95
be: d4 e0 ldi r29, 0x04 ; 4
c0: de bf out 0x3e, r29 ; 62
c2: cd bf out 0x3d, r28 ; 61
c4: 8f ef ldi r24, 0xFF ; 255
c6: 84 bb out 0x14, r24 ; 20
c8: 87 bb out 0x17, r24 ; 23
ca: 8a bb out 0x1a, r24 ; 26
cc: 8f ef ldi r24, 0xFF ; 255
ce: 88 bb out 0x18, r24 ; 24
d0: 8b bb out 0x1b, r24 ; 27
d2: 85 bb out 0x15, r24 ; 21
d4: 80 e9 ldi r24, 0x90 ; 144
d6: 91 e0 ldi r25, 0x01 ; 1
d8: 0e 94 47 00 call 0x8e <warte>
dc: 18 ba out 0x18, r1 ; 24
de: 1b ba out 0x1b, r1 ; 27
e0: 15 ba out 0x15, r1 ; 21
e2: 80 e9 ldi r24, 0x90 ; 144
e4: 91 e0 ldi r25, 0x01 ; 1
e6: 0e 94 47 00 call 0x8e <warte>
ea: f0 cf rjmp .-32 ; 0xcc <main+0x10>


Und das hex so:
avr-objcopy -j .text -j .data -O ihex arg.elf arg.hex
avr-objdump -D arg.hex -mavr5


arg.hex: file format ihex

Disassembly of section .sec1:

00000000 <.sec1>:
0: 0c 94 2a 00 jmp 0x0x54
4: 0c 94 45 00 jmp 0x0x8a
8: 0c 94 45 00 jmp 0x0x8a
c: 0c 94 45 00 jmp 0x0x8a
10: 0c 94 45 00 jmp 0x0x8a
14: 0c 94 45 00 jmp 0x0x8a
18: 0c 94 45 00 jmp 0x0x8a
1c: 0c 94 45 00 jmp 0x0x8a
20: 0c 94 45 00 jmp 0x0x8a
24: 0c 94 45 00 jmp 0x0x8a
28: 0c 94 45 00 jmp 0x0x8a
2c: 0c 94 45 00 jmp 0x0x8a
30: 0c 94 45 00 jmp 0x0x8a
34: 0c 94 45 00 jmp 0x0x8a
38: 0c 94 45 00 jmp 0x0x8a
3c: 0c 94 45 00 jmp 0x0x8a
40: 0c 94 45 00 jmp 0x0x8a
44: 0c 94 45 00 jmp 0x0x8a
48: 0c 94 45 00 jmp 0x0x8a
4c: 0c 94 45 00 jmp 0x0x8a
50: 0c 94 45 00 jmp 0x0x8a
54: 11 24 eor r1, r1
56: 1f be out 0x3f, r1 ; 63
58: cf e5 ldi r28, 0x5F ; 95
5a: d4 e0 ldi r29, 0x04 ; 4
5c: de bf out 0x3e, r29 ; 62
5e: cd bf out 0x3d, r28 ; 61
60: 10 e0 ldi r17, 0x00 ; 0
62: a0 e6 ldi r26, 0x60 ; 96
64: b0 e0 ldi r27, 0x00 ; 0
66: ec ee ldi r30, 0xEC ; 236
68: f0 e0 ldi r31, 0x00 ; 0
6a: 02 c0 rjmp .+4 ; 0x0x70
6c: 05 90 lpm r0, Z+
6e: 0d 92 st X+, r0
70: a0 36 cpi r26, 0x60 ; 96
72: b1 07 cpc r27, r17
74: d9 f7 brne .-10 ; 0x0x6c
76: 10 e0 ldi r17, 0x00 ; 0
78: a0 e6 ldi r26, 0x60 ; 96
7a: b0 e0 ldi r27, 0x00 ; 0
7c: 01 c0 rjmp .+2 ; 0x0x80
7e: 1d 92 st X+, r1
80: a0 36 cpi r26, 0x60 ; 96
82: b1 07 cpc r27, r17
84: e1 f7 brne .-8 ; 0x0x7e
86: 0c 94 5e 00 jmp 0x0xbc
8a: 0c 94 00 00 jmp 0x0x0
8e: cf 93 push r28
90: df 93 push r29
92: ac 01 movw r20, r24
94: 20 e0 ldi r18, 0x00 ; 0
96: 30 e0 ldi r19, 0x00 ; 0
98: 28 17 cp r18, r24
9a: 39 07 cpc r19, r25
9c: 64 f4 brge .+24 ; 0x0xb6
9e: a4 ec ldi r26, 0xC4 ; 196
a0: b9 e0 ldi r27, 0x09 ; 9
a2: c0 e0 ldi r28, 0x00 ; 0
a4: d0 e0 ldi r29, 0x00 ; 0
a6: cd 01 movw r24, r26
a8: 01 97 sbiw r24, 0x01 ; 1
aa: f1 f7 brne .-4 ; 0x0xa8
ac: 2f 5f subi r18, 0xFF ; 255
ae: 3f 4f sbci r19, 0xFF ; 255
b0: 24 17 cp r18, r20
b2: 35 07 cpc r19, r21
b4: c4 f3 brlt .-16 ; 0x0xa6
b6: df 91 pop r29
b8: cf 91 pop r28
ba: 08 95 ret
bc: cf e5 ldi r28, 0x5F ; 95
be: d4 e0 ldi r29, 0x04 ; 4
c0: de bf out 0x3e, r29 ; 62
c2: cd bf out 0x3d, r28 ; 61
c4: 8f ef ldi r24, 0xFF ; 255
c6: 84 bb out 0x14, r24 ; 20
c8: 87 bb out 0x17, r24 ; 23
ca: 8a bb out 0x1a, r24 ; 26
cc: 8f ef ldi r24, 0xFF ; 255
ce: 88 bb out 0x18, r24 ; 24
d0: 8b bb out 0x1b, r24 ; 27
d2: 85 bb out 0x15, r24 ; 21
d4: 80 e9 ldi r24, 0x90 ; 144
d6: 91 e0 ldi r25, 0x01 ; 1
d8: 0e 94 47 00 call 0x0x8e
dc: 18 ba out 0x18, r1 ; 24
de: 1b ba out 0x1b, r1 ; 27
e0: 15 ba out 0x15, r1 ; 21
e2: 80 e9 ldi r24, 0x90 ; 144
e4: 91 e0 ldi r25, 0x01 ; 1
e6: 0e 94 47 00 call 0x0x8e
ea: f0 cf rjmp .-32 ; 0x0xcc

Das hex codiert also rund 240 Bytes (Objektgröße) in 680 Bytes (Dateigröße).

Benedikt.Seidl
12.05.2006, 17:19
Ich dachte, Du hast einen ATMega16 und keinen ATMega32... jup. war nur ein zitat von der seite.

avr-gcc arg.c -o arg.elf -mmcu=atmega16 -Os
avr-objdump -d arg.elf
bei mir kommt nach diesen befehlen das hier raus:klick (http://www.swine.de/daten/elf.txt)
(da kommt nach main noch was)

danke für die andauernde hilfe!

SEIDL.

johannuhrmann
12.05.2006, 20:04
Hi Benedikt,

aus irgendwelchen unerfindlichen Gründen verwendet Deine avr-libc Fließkommaemulationen. (zumindest sieht es für mich so aus)

Bitte schreib doch mal die Ausgaben folgender Befehle:
avr-gcc -v
avr-objcopy -V

Welche Version der avr-libc verwendest Du?
Wie hast Du die Tools übersetzt?

Grüße,

Hans

Benedikt.Seidl
12.05.2006, 20:53
avr-gcc -v
Reading specs from /sw/share/avr/lib/gcc-lib/avr/3.3.2/specs
Configured with: ./configure --target=avr --prefix=/sw/share/avr --prefix=/sw/share/avr --bindir=/sw/bin --mandir=/sw/share/man --infodir=/sw/share/info --enable-languages=c,c++ --disable-nls
Thread model: single
gcc version 3.3.2


avr-objcopy -V
GNU objcopy 2.14 20030612
Copyright 2002 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License. This program has absolutely no warranty.


Welche Version der avr-libc verwendest Du?
eigentlich frisch runtergeladen. allerdings sich wäre sicher, kann man das irgendwie überprüfen?


Wie hast Du die Tools übersetzt?
sorry,.. versteh ich nicht. avr-gcc habe ich mit fink installiert

danke für die hilfe! ich glaube ohne euch,.. hätt ich erst gar nicht angefangen


SEIDL.