Forum: Compiler & IDEs avr-gcc Probleme OpenSuse 13.2


von hufnala (Gast)


Lesenswert?

Hallo zusammen,

ich habe nach langem mal wieder vor etwas zu programmieren und habe
mich jetzt 2 Abende mit OpenSuse 13.2, der aktuellen avr-gcc 4.8.3 und 
eclipse Mars (und dem aktuellen plugin 2.4.x hier aus dem Thread) 
rumgeschlagen. Die MCU Auswahl und alles funktioniert soweit, aber ich 
bekomme keines meiner alten Programme und auch kein "Hello World" zum 
laufen (ATMega 16).

Irgendwie komme ich nicht zum Ziel und weiss auch nicht mehr weiter.

Selbst das folgende Testprogramm
1
/*
2
 * main.c
3
 *
4
 *  Created on: 23.11.2015
5
 *      Author: hufnala
6
 */
7
#include <avr/io.h>
8
9
int main()
10
{
11
  uint8_t test;
12
13
  DDRB=0xFF;
14
  PORTB = 0xFF;
15
  for(;;)
16
  {
17
    test++;
18
  }
19
}


Schmeisst mir folgende Fehlermeldung:

19:46:10 **** Incremental Build of configuration Release for project 
Test ****
make all
Building file: ../main.c
Invoking: AVR Compiler
avr-gcc -Wall -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char 
-funsigned-bitfields -mmcu=atmega16 -DF_CPU=1000000UL -MMD -MP 
-MF"main.d" -MT"main.o" -c -o "main.o" "../main.c"
as: Unbekannte Option »-mmcu=avr5«
subdir.mk:18: recipe for target 'main.o' failed
make: *** [main.o] Error 1

19:46:10 Build Finished (took 150ms)

In den Fehlern kommt noch:
make:*** main.o Error 1 und
recipe for target main.o faile,
aber keinerlei Warnungen.

Die Pfade stehen auf den für OpenSuse üblichen opt/cross Verzeichnissen,
und im AVR Projekt sind unter C/C++ General|Paht&Symbols für GNUC/GNUC++ 
und ASM die Links ebenfalls auf die opt/cross/avr gesetzt und
External Builder | make eingetragen, unter C/C++Build|Settings|Assembler 
"avr-gcc"

Ich habe ja verstanden (aus nem alten Thread hier), dass der Assembler 
irgendwie falsch konfiguriert ist (--> Standard Assembler), ich weiss 
aber nicht wo ich das beheben soll.

Die automatisch erzeugten MakeFiles habe ich auch mal nach Einträgen CC= 
durchforstet, bin aber nicht fündig geworden wo ich da was auf avr-gcc 
umbiegen könnte.

Wenn ich das ganze von der Kommandozeile aus, von folgendem Beispiel 
abegeleitet 
(http://rn-wissen.de/wiki/index.php/Hallo_Welt_f%C3%BCr_AVR_%28LED_blinken%29) 
mache, passiert folgendes:

xxxx@linux-b91i:~/workspace/Test> avr-gcc main.c -o main.o -Os -g 
-mmcu=atmega16
/usr/bin/avr-ld: warning: -z relro ignored.
xxxx@linux-b91i:~/workspace/Test>
soweit OK aber das linken führt dann auch schon ins Nirwana?
hufnala@linux-b91i:~/workspace/Test> avr-gcc main.o -o main.elf 
-mmcu=atmega16
/usr/bin/avr-ld: warning: -z relro ignored.
main.o: In function `__vector_1':
(.text+0x68): multiple definition of `__bad_interrupt'
/opt/cross/avr/lib/gcc/avr/4.8.3/../../../../avr/lib/avr5/crtm16.o:(.tex 
t+0x0):  first defined here
main.o: In function `__vectors':
(.text+0x0): multiple definition of `__vectors'
/opt/cross/avr/lib/gcc/avr/4.8.3/../../../../avr/lib/avr5/crtm16.o:(.vec 
tors+0x0):  first defined here
collect2: error: ld returned 1 exit status

Irgendwas ist faul, ich habe aber auch nichts gefunden wie ich den 
Assembler umbiegen kann. Die ganzen anderen Probleme (Programmer / MCU 
Auswählen usw.) habe ich auch nicht.

Ich hab das ganze auch mit ner alten Luna eclipse probiert die definitiv
lief, das geht auch nicht mehr. Die Toolchain und eclipse hatte ich
zwischendurch auch schon wieder runter und neu installiert ohne Erfolg.

Hat irgendjemand noch eine Idee??? Wäre echt super wenn ich das zum 
laufen
bekommen würde.

Vielen Dank, Ciao hufnala

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Entweder hat Eclipse Einstellungen verbockt oder du hast keine gültige 
Toolchain (oder beides :-))

Ist avr-as installiert?

Übersetz das Zeug mal von Hand und gib zusätzlich -v an: Welches 
Assembler wird verwendet?

von hufnala (Gast)


Lesenswert?

Dank, avr-as muss ich suchen, habe ich nirgends gefunden. Das von hand 
meinst du mit den Befehlen die ich schon probiert habe?

//hufnala

von Gastino G. (gastino)


Lesenswert?

Von welchem Repository hast Du die AVR-Toolchain installiert? Das ist 
unter der Suse ein wenig hakelig, weil es mehrere Pfade gibt und man 
unter Umständen den falschen erwischt.

von Lars H. (hufnala)


Lesenswert?

So hier erst mal der Ouput des manuellen Versuchs, leider sagt mir das 
gar nichts :-(

Using built-in specs.
COLLECT_GCC=/opt/cross/avr/bin/avr-gcc
COLLECT_LTO_WRAPPER=/opt/cross/avr/libexec/gcc/avr/4.8.3/lto-wrapper
Target: avr
Configured with: ../gcc-4.8.3/configure -v --target=avr --disable-nls 
--mandir=/opt/cross/avr/share/man --infodir=/opt/cross/avr/share/info 
--program-prefix=avr- --prefix=/opt/cross/avr --with-gnu-ld 
--with-gnu-as --enable-languages=c,c++ --disable-libssp --with-dwarf2
Thread model: single
gcc version 4.8.3 (GCC)
COLLECT_GCC_OPTIONS='-o' 'main.o' '-Os' '-g' '-mmcu=atmega16' '-v'
 /opt/cross/avr/libexec/gcc/avr/4.8.3/cc1 -quiet -v -imultilib avr5 
main.c -quiet -dumpbase main.c -mmcu=atmega16 -auxbase main -g -Os 
-version -o /tmp/ccwvtRbd.s
GNU C (GCC) version 4.8.3 (avr)
        compiled by GNU C version 4.8.3 20140627 [gcc-4_8-branch 
revision 212064], GMP version 5.1.3, MPFR version 3.1.2, MPC version 
1.0.2
GGC heuristics: --param ggc-min-expand=100 --param 
ggc-min-heapsize=131072
ignoring nonexistent directory 
"/opt/cross/avr/lib/gcc/avr/4.8.3/../../../../avr/sys-include"
#include "..." search starts here:
#include <...> search starts here:
 /opt/cross/avr/lib/gcc/avr/4.8.3/include
 /opt/cross/avr/lib/gcc/avr/4.8.3/include-fixed
 /opt/cross/avr/lib/gcc/avr/4.8.3/../../../../avr/include
End of search list.
GNU C (GCC) version 4.8.3 (avr)
        compiled by GNU C version 4.8.3 20140627 [gcc-4_8-branch 
revision 212064], GMP version 5.1.3, MPFR version 3.1.2, MPC version 
1.0.2
GGC heuristics: --param ggc-min-expand=100 --param 
ggc-min-heapsize=131072
Compiler executable checksum: bffdd7004b269d41192ecdc922b78a1e
COLLECT_GCC_OPTIONS='-o' 'main.o' '-Os' '-g' '-mmcu=atmega16' '-v'
 as -v -mmcu=avr5 -mno-skip-bug -o /tmp/cc3s62O8.o /tmp/ccwvtRbd.s
GNU assembler version 2.24.0 (avr) using BFD version (GNU Binutils; 
openSUSE 13.2) 2.24.0.20140403-6.1
COMPILER_PATH=/opt/cross/avr/libexec/gcc/avr/4.8.3/:/opt/cross/avr/libex 
ec/gcc/avr/4.8.3/:/opt/cross/avr/libexec/gcc/avr/:/opt/cross/avr/lib/gcc 
/avr/4.8.3/:/opt/cross/avr/lib/gcc/avr/
LIBRARY_PATH=/opt/cross/avr/lib/gcc/avr/4.8.3/avr5/:/opt/cross/avr/lib/g 
cc/avr/4.8.3/../../../../avr/lib/avr5/:/opt/cross/avr/lib/gcc/avr/4.8.3/ 
:/opt/cross/avr/lib/gcc/avr/4.8.3/../../../../avr/lib/
COLLECT_GCC_OPTIONS='-o' 'main.o' '-Os' '-g' '-mmcu=atmega16' '-v'
 /opt/cross/avr/libexec/gcc/avr/4.8.3/collect2 -m avr5 -o main.o 
/opt/cross/avr/lib/gcc/avr/4.8.3/../../../../avr/lib/avr5/crtm16.o 
-L/opt/cross/avr/lib/gcc/avr/4.8.3/avr5 
-L/opt/cross/avr/lib/gcc/avr/4.8.3/../../../../avr/lib/avr5 
-L/opt/cross/avr/lib/gcc/avr/4.8.3 
-L/opt/cross/avr/lib/gcc/avr/4.8.3/../../../../avr/lib /tmp/cc3s62O8.o 
--start-group -lgcc -lm -lc --end-group
/usr/bin/avr-ld: warning: -z relro ignored.

und

xxx@linux-b91i:~/workspace/Test> avr-gcc main.o -o main.elf 
-mmcu=atmega16 -v
Using built-in specs.
COLLECT_GCC=/opt/cross/avr/bin/avr-gcc
COLLECT_LTO_WRAPPER=/opt/cross/avr/libexec/gcc/avr/4.8.3/lto-wrapper
Target: avr
Configured with: ../gcc-4.8.3/configure -v --target=avr --disable-nls 
--mandir=/opt/cross/avr/share/man --infodir=/opt/cross/avr/share/info 
--program-prefix=avr- --prefix=/opt/cross/avr --with-gnu-ld 
--with-gnu-as --enable-languages=c,c++ --disable-libssp --with-dwarf2
Thread model: single
gcc version 4.8.3 (GCC)
COMPILER_PATH=/opt/cross/avr/libexec/gcc/avr/4.8.3/:/opt/cross/avr/libex 
ec/gcc/avr/4.8.3/:/opt/cross/avr/libexec/gcc/avr/:/opt/cross/avr/lib/gcc 
/avr/4.8.3/:/opt/cross/avr/lib/gcc/avr/
LIBRARY_PATH=/opt/cross/avr/lib/gcc/avr/4.8.3/avr5/:/opt/cross/avr/lib/g 
cc/avr/4.8.3/../../../../avr/lib/avr5/:/opt/cross/avr/lib/gcc/avr/4.8.3/ 
:/opt/cross/avr/lib/gcc/avr/4.8.3/../../../../avr/lib/
COLLECT_GCC_OPTIONS='-o' 'main.elf' '-mmcu=atmega16' '-v'
 /opt/cross/avr/libexec/gcc/avr/4.8.3/collect2 -m avr5 -o main.elf 
/opt/cross/avr/lib/gcc/avr/4.8.3/../../../../avr/lib/avr5/crtm16.o 
-L/opt/cross/avr/lib/gcc/avr/4.8.3/avr5 
-L/opt/cross/avr/lib/gcc/avr/4.8.3/../../../../avr/lib/avr5 
-L/opt/cross/avr/lib/gcc/avr/4.8.3 
-L/opt/cross/avr/lib/gcc/avr/4.8.3/../../../../avr/lib main.o 
--start-group -lgcc -lm -lc --end-group
/usr/bin/avr-ld: warning: -z relro ignored.
main.o: In function `__vector_1':
(.text+0x68): multiple definition of `__bad_interrupt'
/opt/cross/avr/lib/gcc/avr/4.8.3/../../../../avr/lib/avr5/crtm16.o:(.tex 
t+0x0):  first defined here
main.o: In function `__vectors':
(.text+0x0): multiple definition of `__vectors'
/opt/cross/avr/lib/gcc/avr/4.8.3/../../../../avr/lib/avr5/crtm16.o:(.vec 
tors+0x0):  first defined here
collect2: error: ld returned 1 exit status

von Lars H. (hufnala)


Lesenswert?

Hi,

Gastino G. schrieb:
> Von welchem Repository hast Du die AVR-Toolchain installiert? Das ist
> unter der Suse ein wenig hakelig, weil es mehrere Pfade gibt und man
> unter Umständen den falschen erwischt.

wenn ich das richtig sehe ist es aus
obs://build.opensuse.org/CrossToolChain:avr

Als repro ist aber nur das eingetragen:
http://download.opensuse.org/repositories/CrossToolchain:/avr/openSUSE_13.2/

Danke
//hufnala

von Gastino G. (gastino)


Lesenswert?

Den AVR-gcc solltest Du von hier haben:

http://download.opensuse.org/repositories/CrossToolchain:/avr/openSUSE_13.2/


Ich bin schon auf die openSuse Leap 42.1 umgestiegen und nutze 
Code::Blocks, aber hier mal meine Pfade zu den AVR-Toolchain-Binaries:

Pfad:                    /usr/bin

C-Compiler:              avr-gcc

C++-Compiler:            avr-g++

Linker (dynamic libs):   avr-g++

Linker (static libs):    avr-ar


Damit läuft es bei mir problemlos. Ich hatte früher auch mal Probleme 
unter 13.1 und 13.2, das lag aber eben am falschen Toolchain-Pfad. 
"/opt/cross" ist, wenn ich mich recht erinnere, nicht richtig, bin aber 
absolut nicht mehr sicher.

Edit: Dein Repository passt schon mal...

: Bearbeitet durch User
von tictactoe (Gast)


Lesenswert?

hufnala schrieb:
> xxxx@linux-b91i:~/workspace/Test> avr-gcc main.c -o main.o -Os -g
> -mmcu=atmega16
> /usr/bin/avr-ld: warning: -z relro ignored.
> xxxx@linux-b91i:~/workspace/Test>

Schaut doch gut aus. Das Programm ist fertig gelinkt worden. Du hast 
nämlich -c nicht angegeben. Du hast ihm nur einen sehr seltsamen Namen 
gegeben: main.o.

Danach geht das hier natürlich schief:

hufnala schrieb:
> hufnala@linux-b91i:~/workspace/Test> avr-gcc main.o -o main.elf
> -mmcu=atmega16

Ein fertiges Programm ein weiters Mal mit dem Startup-Code zu linken 
führt natürlich zu doppelten Definitionen.

von Lars H. (hufnala)


Lesenswert?

Hm, unter usr/bin siehts bei mir so aus:

xxx@linux-b91i:/usr/bin> ls avr* -la
-rwxr-xr-x 1 root root  592344  6. Okt 2014  avr-addr2line
-rwxr-xr-x 1 root root  620928  6. Okt 2014  avr-ar
-rwxr-xr-x 1 root root  838912  6. Okt 2014  avr-as
lrwxrwxrwx 1 root root      26 22. Nov 19:30 avr-c++ -> 
/opt/cross/avr/bin/avr-c++
lrwxrwxrwx 1 root root      26 22. Nov 19:30 avr-cpp -> 
/opt/cross/avr/bin/avr-cpp
-rwxr-xr-x 1 root root  446784 15. Okt 2014  avrdude
-rwxr-xr-x 1 root root   31560  6. Okt 2014  avr-elfedit
-rwxr-xr-x 1 root root    3069 21. Nov 2014  avr-example
-rwxr-xr-x 1 root root     236 21. Nov 2014  avr-g++
-rwxr-xr-x 1 root root     236 21. Nov 2014  avr-gcc
-rwxr-xr-x 1 root root     236 21. Nov 2014  avr-gcc-4.8.3
-rwxr-xr-x 1 root root      73 21. Nov 2014  avr-gdb
-rwxr-xr-x 1 root root      76 21. Nov 2014  avr-gdbtui
-rwxr-xr-x 1 root root  659096  6. Okt 2014  avr-gprof
-rwxr-xr-x 1 root root      77 21. Nov 2014  avr-insight
-rwxr-xr-x 2 root root 1065696  6. Okt 2014  avr-ld
-rwxr-xr-x 2 root root 1065696  6. Okt 2014  avr-ld.bfd
-rwxr-xr-x 1 root root  838912  6. Okt 2014  avr-nesc-as
-rwxr-xr-x 1 root root  601208  6. Okt 2014  avr-nm
-rwxr-xr-x 1 root root  780184  6. Okt 2014  avr-objcopy
-rwxr-xr-x 1 root root  907608  6. Okt 2014  avr-objdump
-rwxr-xr-x 1 root root  620928  6. Okt 2014  avr-ranlib
-rwxr-xr-x 1 root root  414472  6. Okt 2014  avr-readelf
-rwxr-xr-x 1 root root  602200  6. Okt 2014  avr-size
-rwxr-xr-x 1 root root  592248  6. Okt 2014  avr-strings
-rwxr-xr-x 1 root root  780216  6. Okt 2014  avr-strip

Eclipse mag irgendwie auch nicht, das Ding ist A..chlangsam und stürzt
mir bei Fenster|Benutzervorgaben|AVR ab :-(

//hufnala

: Bearbeitet durch User
von Lars H. (hufnala)


Lesenswert?

tictactoe schrieb:
> hufnala schrieb:
>> xxxx@linux-b91i:~/workspace/Test> avr-gcc main.c -o main.o -Os -g
>> -mmcu=atmega16
>> /usr/bin/avr-ld: warning: -z relro ignored.
>> xxxx@linux-b91i:~/workspace/Test>
>
> Schaut doch gut aus. Das Programm ist fertig gelinkt worden. Du hast
> nämlich -c nicht angegeben. Du hast ihm nur einen sehr seltsamen Namen
> gegeben: main.o.
>
> Danach geht das hier natürlich schief:
>
> hufnala schrieb:
>> hufnala@linux-b91i:~/workspace/Test> avr-gcc main.o -o main.elf
>> -mmcu=atmega16
>
> Ein fertiges Programm ein weiters Mal mit dem Startup-Code zu linken
> führt natürlich zu doppelten Definitionen.

Ähm, sorry, klingt nach bahnhof, den Dateinamen habe ich mir ausgedacht 
und der Rest ist von 
http://rn-wissen.de/wiki/index.php/Hallo_Welt_f%C3%BCr_AVR_%28LED_blinken%29
abgetippt. Fehler gehen auf mein Konto, habe bisher nichts händisch mit 
der Toolchain gemacht ;-(

Was muss ich tun um ein hex File zu bekommen, das main.o sieht nicht 
nach einem aus ;-(

Danke Dir, hufnala

: Bearbeitet durch User
von guest (Gast)


Lesenswert?

1
avr-gcc -c main.c -o main.o -Os -g -mmcu=atmega16
2
avr-gcc main.o -o main.elf -mmcu=atmega16
3
avr-objcopy -j .text -j .data -O ihex main.elf main.hex
... und insbesondere in dem ersten Kommando das "-c" nicht vergessen.

von Lars H. (hufnala)


Lesenswert?

Hi,

super, Danke an alle hat funktioniert!

guest schrieb:
>
1
> avr-gcc -c main.c -o main.o -Os -g -mmcu=atmega16
2
> avr-gcc main.o -o main.elf -mmcu=atmega16
3
> avr-objcopy -j .text -j .data -O ihex main.elf main.hex
4
>
> ... und insbesondere in dem ersten Kommando das "-c" nicht vergessen.

Inzwischen kann ich auch mit dem Beispiel von hier
https://www.mikrocontroller.net/articles/C_ohne_Makefile

das ganze auch zum laufen bringen, einzig avrdude hat den (zum Glück) 
abgezogenen programmer nicht gefunden. Sonst wäre das alte Programm auch 
platt. Ich wusste nicht ob das exit zum avrdude gehört und habs mal 
vorsichtshalber nicht gelöscht :-)

Heisst erst mal die Toolchain als solche funktioniert. Bleibt das 
eclipse Problem, aber das kann warten.

Mir ein shell-script zu basteln in dem ich die Namen übergebe traue ich 
mir zu bevor ich anfange auch noch an einem MakeFile zu basteln. das 
FCPU muss halt noch dazu.

Schönen Abend noch und Danke nochmals für die schnelle und Umfangreiche 
Hilfe!

//hufnala

von Lars H. (hufnala)


Lesenswert?

Hi

CodeBlocks war ne gute Idee, Danke dafür.

Läuft out of the box mit dem Beispiel und die avr toolchain gleich 
erkannt.
1. Build ohne Probleme. Insofern hat sich das mit eclipse auch erst mal 
erledigt.

Ciao, und schönen Abend
//hufnala

von Gastino G. (gastino)


Lesenswert?

Ja, Code::Blocks finde ich wesentlich übersichtlicher und kann genau 
das, was man braucht. Unter Linux eine prima Plattform für die 
AVR-Entwicklung.

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.