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
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 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.
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
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...
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.
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
> ... 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
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