Forum: Compiler & IDEs Eclipse mit AVR: Problem beim Laden des Programmes auf den AVR


von tobi (Gast)


Lesenswert?

Hi,

ich versuche gerade Eclipse mit AVR zu laufen zu bekommen(Was wohl die 
leichteste Methode ist, AVRs mit eine Macbook zu Programmieren?). 
Allerdings klappt es nicht ;(

Ich möchte ein kleines Test-Programm auf den uController schreiben. Es 
soll einfach eine LED blinken lassen. Allerdings tut sich gar nichts.
Falsche Einstellung in Eclipse?

Software:
Eclipse(Mars.2 Release (4.5.2))
AVR Eclipse Plugin Version 2.4.1

Hardware:
Verwendeter Mikrocontroller: ATMEGA8-16PU

Verwendeter Programmer:
USBasp (gekauft: Programmierer-Adapter 3.3V oder 5V USBASP 
Download-Programm ISP-AVR
http://www.amazon.de/Programmierer-Adapter-3-3V-USBASP-Download-Programm-ISP-AVR/dp/B00AVRHVPO/ref=pd_bxgy_23_img_2?ie=UTF8&refRID=05Y7492NC4QX46XZW8RN)

Der Richtige MCU-Type wird automatisch vom Programm gefunden, wenn man 
auf "Load from MCU" drückt.

Code:
1
#include <avr/io.h>
2
3
#define running  1
4
5
// Unterprogramm mit Zeitschleife fuer ATMega16 ohne Quarz
6
void delay_ms( unsigned int ms )
7
{
8
    unsigned int  i;
9
    unsigned int  j;
10
11
    for ( i = ms;  i;  i-- )
12
    {
13
        for ( j = 1000;  j;  j-- )
14
        {
15
          asm ("nop");
16
        }
17
    }
18
}
19
20
int main( void )
21
{
22
23
    // PortD6 als Output konfigurieren
24
    DDRD |= _BV(PD6);
25
26
    // Hauptschleife des Programms
27
    while ( running )
28
    {
29
      // LED einschalten, und dann warten
30
        PORTD |= _BV(PD6);
31
        delay_ms( 1000 );
32
33
      // LED ausschalten, und dann warten
34
        PORTD &= ~_BV(PD6);
35
        delay_ms( 29000 );
36
    }
37
}


Output ("CDT Build Console[AVR]"):
1
16:07:25 **** Build of configuration Debug for project AVR ****
2
make all 
3
Building file: ../main.c
4
Invoking: AVR Compiler
5
avr-gcc -Wall -g2 -gstabs -O0 -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega8 -DF_CPU=16000000UL -MMD -MP -MF"main.d" -MT"main.o" -c -o "main.o" "../main.c"
6
Finished building: ../main.c
7
 
8
Building target: AVR.elf
9
Invoking: AVR C Linker
10
avr-gcc -Wl,-Map,AVR.map -mmcu=atmega8 -o "AVR.elf"  ./main.o   
11
Finished building target: AVR.elf
12
 
13
Invoking: AVR Create Extended Listing
14
avr-objdump -h -S AVR.elf  >"AVR.lss"
15
Finished building: AVR.lss
16
 
17
Create Flash image (ihex format)
18
avr-objcopy -R .eeprom -R .fuse -R .lock -R .signature -O ihex AVR.elf  "AVR.hex"
19
Finished building: AVR.hex
20
 
21
Create eeprom image (ihex format)
22
avr-objcopy -j .eeprom --no-change-warnings --change-section-lma .eeprom=0 -O ihex AVR.elf  "AVR.eep"
23
Finished building: AVR.eep
24
 
25
Invoking: Print Size
26
avr-size --format=avr --mcu=atmega8 AVR.elf
27
AVR Memory Usage
28
----------------
29
Device: atmega8
30
31
Program:     230 bytes (2.8% Full)
32
(.text + .data + .bootloader)
33
34
Data:          0 bytes (0.0% Full)
35
(.data + .bss + .noinit)
36
37
38
Finished building: sizedummy
39
 
40
41
16:07:26 Build Finished (took 401ms)

Allerdings bekomme ich in einem anderen Consolen-Fenster folgende 
Fehler-Meldung:
1
<terminated> (exit value: 127) AVR.elf[C/C++ Application] /Documents/workspace/AVR/Debug/AVR.elf(4/19/16, 4:07PM)

Hatte eventuell jemand das selbe Problem und weiß wie ich es beheben 
kann?

von Felix P. (fixxl)


Lesenswert?

Du musst nicht im Debug-, sondern im Release-Modus arbeiten.

Project --> Build Configurations --> Set Active --> Release

von Oliver S. (oliverso)


Lesenswert?

Ja.

Einfach nicht in andere Consolen-Fenster schauen ;)

Anscheinend will dein Eclipse die erzeugte elf-Datei auf dem Mac 
ausführen, was natürlich schief geht. Alles andere hat aber fehlerfrei 
funktioniert.

Oliver

von tobi (Gast)


Lesenswert?

Super, vielen dank für euer schnelle Antworten. :-)

Jetzt habe ich ein 2. Problem. Wenn ich auf "upload current project to 
atmel target mcu" klicke kommt folgende Meldung:
1
Launching /usr/local/CrossPack-AVR-20131216/bin/avrdude -pm8 -cusbasp -Uflash:w:AVR.hex:a -Ueeprom:w:AVR.eep:a 
2
Output:
3
4
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
5
avrdude: AVR device initialized and ready to accept instructions
6
7
Reading | ################################################## | 100% 0.00s
8
9
avrdude: Device signature = 0x1e9307
10
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
11
         To disable this feature, specify the -D option.
12
avrdude: erasing chip
13
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
14
avrdude: reading input file "AVR.hex"
15
avrdude: input file AVR.hex auto detected as Intel Hex
16
avrdude: writing flash (106 bytes):
17
18
Writing | ################################################## | 100% 0.07s
19
20
avrdude: 106 bytes of flash written
21
avrdude: verifying flash memory against AVR.hex:
22
avrdude: load data flash data from input file AVR.hex:
23
avrdude: input file AVR.hex auto detected as Intel Hex
24
avrdude: input file AVR.hex contains 106 bytes
25
avrdude: reading on-chip flash data:
26
27
Reading | ################################################## | 100% 0.04s
28
29
avrdude: verifying ...
30
avrdude: 106 bytes of flash verified
31
avrdude: reading input file "AVR.eep"
32
avrdude: input file AVR.eep auto detected as Intel Hex
33
avrdude: writing eeprom (0 bytes):
34
35
Writing | ################################################## | 100% 0.00s
36
37
avrdude: 0 bytes of eeprom written
38
avrdude: verifying eeprom memory against AVR.eep:
39
avrdude: load data eeprom data from input file AVR.eep:
40
avrdude: input file AVR.eep auto detected as Intel Hex
41
avrdude: input file AVR.eep contains 0 bytes
42
avrdude: reading on-chip eeprom data:
43
44
Reading | 
45
avrdude finished

von Oliver S. (oliverso)


Lesenswert?

Jaaaaa....

Und?

Oliver

von tobi (Gast)


Lesenswert?

Naja, meine LED blinkt noch nicht:D
Die Meldung bedeutet, dass das Programm erfolgreich auf den uController 
geschrieben wurde, oder? Dann muss ich wohl nochmal die Schaltung 
anschauen...

von Bernd K. (prof7bit)


Lesenswert?

In deinem ersten Posting waren es ungefähr 230 Bytes, das kommt ungefähr 
hin¹ für den Code den Du gepostest hast. Im Zweiten sinds nur noch 106 
Bytes, da passt nie im Leben das Kompilat des oben geposteten 
Programms rein, stattdessen ist das so ziemlich aufs Byte genau die 
Größe die eine komplett leere main() ohne alles benötigt auf der Stufe 
-Os wenn mich mein Gedächtnis nicht komplett im Stich lässt..

Normalerweise würd ich ja sagen das passiert wenn er die main() komplett 
wegoptimiert wegen eines vergessenen volatile oder dergleichen, aber ich 
kann in dem geposteten Programm keinen derartigen Fehler erkennen.

Du bist da vielleicht irgendwo im Projekt verrutscht, hast eventuell die 
falsche hex geflasht. Überprüf nochmal alle Einstellungen.

[Edit] ¹) ich sehe gerade das erste Posting war noch in der 
Debug-Konfiguration, also kann man das nicht vergleichen. Trotzdem kommt 
mir das zweite zu klein vor.

: Bearbeitet durch User
von tobi (Gast)


Lesenswert?

Ich habe es jetzt so hinbekommen, dass ich unter AVR - AVRDude - "Fuses" 
- "direkt hex value" ausgewählt habe und bei AVR - AVRDude - 
"Flash/EEPROM" beides auf "do not upload flash/eeporm image" ausgewählt 
habe.

Damit konnte ich meine LED zum blinken bringen. :-)


Die Byte größe sollte passen. Den Code den ich oben gepostet habe, habe 
ich von dem AVR-Tutorial hier 
(https://www.mikrocontroller.net/articles/AVR_Eclipse) - der Output sagt 
dort auch eine Bytegröße von 108 Bytes- Also ungefähr die selbe 
Größenordnung wie bei mir.

von Carl D. (jcw2)


Lesenswert?

delay_ms() bitte aus der AVRLibc nehmen und NICHT selber implementieren 
wollen. Der Compiler schmeißt das nämlich komplett weg, da es nur Zeit 
und FLASH kostet.
 In <util/delay.h> wird mit großem Aufwand genau das verhindert.

Vermutlich blinkt die LED, aber im 3-stelligen kHz Bereich.
 -> messen! Mit Oszi oder LA!

: Bearbeitet durch User
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.