avr-gcc Probleme OpenSuse 13.2

Gast #4361581
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
#4361647
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
#4361663
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
#4361668
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...
Gast #4361679
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.
#4361695
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
#4361707
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
Gast #4361719
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.
#4361747
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren