Forum: Mikrocontroller und Digitale Elektronik Assemblerprogramm unter Eclipse läuft nicht.


von Frank T. (frankatmicro)


Lesenswert?

Hallo zusammen.

Ich wollte von der Seite 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_7-Segment-Anzeige 
das erste Assembler-Programm in Eclipse nutzen, um 7 Segment-Anzeigen 
aus zu probieren.

Dazu habe ich in einer main.c mit AVR-GCC-Toolchain die 7-seg.sx 
includiert und danach jede Menge Fehler bekommen.

Darum möchte ich nachfragen, wie ich in Eclipse Assembler-Code 
assemblieren kann?

Über eure Hilfe würde ich mich sehr freuen, brauche mal einen 
funktionierenden Anfang.


Gruß
Frank

von Innensechskant (Gast)


Lesenswert?

>Dazu habe ich in einer main.c mit AVR-GCC-Toolchain die 7-seg.sx
>includiert und danach jede Menge Fehler bekommen.

Hm. Ich sehe da im Tutorial gar keine Datei des Namens "7-seg.sx".
Welche ist das und was steht darin?

Was für Fehler erhälst Du?

von Frank T. (frankatmicro)


Lesenswert?

Das erste Programm auf der Seite habe ich unter 7-seg.sx gespeichert.

Der Inhalt:
1
 
2
.def zero  = r1
3
.def count = r16
4
.def temp1 = r17
5
 
6
.org 0x0000
7
           rjmp    main                ; Reset Handler
8
;
9
main:
10
           ldi     temp1, HIGH(RAMEND)
11
           out     SPH, temp1
12
           ldi     temp1, LOW(RAMEND)  ; Stackpointer initialisieren
13
           out     SPL, temp1
14
 
15
;
16
           ldi     temp1, $FF        ; die Anzeige hängt am Port D
17
           out     DDRD, temp1       ; alle Pins auf Ausgang
18
;
19
           ldi     count, 0          ; und den Zähler initialisieren
20
           mov     zero, count
21
;
22
loop:
23
           ldi     ZL, LOW(Codes*2)  ; die Startadresse der Tabelle in den
24
           ldi     ZH, HIGH(Codes*2) ; Z-Pointer laden
25
 
26
           mov     temp1, count      ; die wortweise Adressierung der Tabelle
27
           add     temp1, count      ; berücksichtigen
28
 
29
           add     ZL, temp1         ; und ausgehend vom Tabellenanfang
30
           adc     ZH, zero          ; die Adresse des Code Bytes berechnen
31
 
32
           lpm                       ; dieses Code Byte in das Register r0 laden
33
 
34
           out     PORTD, r0         ; und an die Anzeige ausgeben
35
;
36
           inc     count             ; den Zähler erhöhen, wobei der Zähler
37
           cpi     count, 10         ; immer nur von 0 bis 9 zählen soll
38
           brne    wait
39
           ldi     count, 0
40
;
41
wait:      ldi     r17, 10           ; und etwas warten, damit die Ziffer auf
42
wait0:     ldi     r18, 0            ; der Anzeige auch lesbar ist, bevor die
43
wait1:     ldi     r19, 0            ; nächste Ziffer gezeigt wird
44
wait2:     dec     r19
45
           brne    wait2
46
           dec     r18
47
           brne    wait1
48
           dec     r17
49
           brne    wait0
50
;
51
           rjmp    loop              ; auf zur nächsten Ausgabe
52
;
53
Codes:                               ; Die Codetabelle für die Ziffern 0 bis 9
54
                                     ; sie regelt, welche Segmente für eine bestimmte
55
                                     ; Ziffer eingeschaltet werden müssen
56
                                     ;
57
           .db     0b11000000        ; 0: a, b, c, d, e, f
58
           .db     0b11111001        ; 1: b, c
59
           .db     0b10100100        ; 2: a, b, d, e, g
60
           .db     0b10110000        ; 3: a, b, c, d, g
61
           .db     0b10011001        ; 4: b, c, f, g
62
           .db     0b10010010        ; 5: a, c, d, f, g
63
           .db     0b10000010        ; 6: a, c, d, e, f, g
64
           .db     0b11111000        ; 7: a, b, c
65
           .db     0b10000000        ; 8: a, b, c, d, e, f, g
66
           .db     0b10010000        ; 9: a, b, c, d, f, g

Die Fehlermeldungen sind:
1
make all 
2
Building file: ../avr-sammlng-2.c
3
Invoking: AVR Compiler
4
avr-gcc -Wall -g2 -gstabs -O0 -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega32 -DF_CPU=4000000UL -MMD -MP -MF"avr-sammlng-2.d" -MT"avr-sammlng-2.d" -c -o "avr-sammlng-2.o" "../avr-sammlng-2.c"
5
In file included from ../avr-sammlng-2.c:7:
6
../7-seg.sx:9: error: expected identifier or '(' before '.' token
7
../7-seg.sx:14: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'Handler'
8
../7-seg.sx:16: error: expected '=', ',', ';', 'asm' or '__attribute__' before ':' token
9
../7-seg.sx:19: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'initialisieren'
10
../7-seg.sx:23: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'temp1'
11
../7-seg.sx:23: error: stray '$' in program
12
../7-seg.sx:23: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'Anzeige'
13
../7-seg.sx:23: error: stray '\303' in program
14
../7-seg.sx:23: error: stray '\244' in program
15
../7-seg.sx:24: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'Pins'
16
../7-seg.sx:26: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'count'
17
../7-seg.sx:26: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'den'
18
../7-seg.sx:26: error: stray '\303' in program
19
../7-seg.sx:26: error: stray '\244' in program
20
../7-seg.sx:29: error: expected '=', ',', ';', 'asm' or '__attribute__' before ':' token
21
../7-seg.sx:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'Startadresse'
22
../7-seg.sx:31: error: expected '=', ',', ';', 'asm' or '__attribute__' before '-' token
23
../7-seg.sx:33: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'wortweise'
24
../7-seg.sx:34: error: stray '\303' in program
25
../7-seg.sx:34: error: stray '\274' in program
26
../7-seg.sx:34: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'cksichtigen'
27
../7-seg.sx:36: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'ausgehend'
28
../7-seg.sx:37: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'Adresse'
29
../7-seg.sx:39: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'Code'
30
../7-seg.sx:41: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'an'
31
../7-seg.sx:43: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'count'
32
../7-seg.sx:43: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'Z'
33
../7-seg.sx:43: error: stray '\303' in program
34
../7-seg.sx:43: error: stray '\244' in program
35
../7-seg.sx:43: error: stray '\303' in program
36
../7-seg.sx:43: error: stray '\266' in program
37
../7-seg.sx:43: error: stray '\303' in program
38
../7-seg.sx:43: error: stray '\244' in program
39
../7-seg.sx:44: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'nur'
40
../7-seg.sx:44: error: stray '\303' in program
41
../7-seg.sx:44: error: stray '\244' in program
42
../7-seg.sx:48: error: expected '=', ',', ';', 'asm' or '__attribute__' before ':' token
43
../7-seg.sx:48: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'etwas'
44
../7-seg.sx:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'Anzeige'
45
../7-seg.sx:50: error: stray '\303' in program
46
../7-seg.sx:50: error: stray '\244' in program
47
../7-seg.sx:50: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'chste'
48
../7-seg.sx:58: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'loop'
49
../7-seg.sx:58: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'zur'
50
../7-seg.sx:58: error: stray '\303' in program
51
../7-seg.sx:58: error: stray '\244' in program
52
../7-seg.sx:60: error: expected '=', ',', ';', 'asm' or '__attribute__' before ':' token
53
../7-seg.sx:60: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'Codetabelle'
54
../7-seg.sx:60: error: stray '\303' in program
55
../7-seg.sx:60: error: stray '\274' in program
56
../7-seg.sx:61: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'regelt'
57
../7-seg.sx:61: error: stray '\303' in program
58
../7-seg.sx:61: error: stray '\274' in program
59
../7-seg.sx:62: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'eingeschaltet'
60
../7-seg.sx:62: error: stray '\303' in program
61
../7-seg.sx:62: error: stray '\274' in program
62
../7-seg.sx:64: error: expected identifier or '(' before '.' token
63
In file included from ../avr-sammlng-2.c:7:
64
../7-seg.sx:64:20: error: invalid suffix "b11000000" on integer constant
65
../7-seg.sx:64: error: expected identifier or '(' before numeric constant
66
../7-seg.sx:65:20: error: invalid suffix "b11111001" on integer constant
67
../7-seg.sx:65: error: expected identifier or '(' before numeric constant
68
../7-seg.sx:66:20: error: invalid suffix "b10100100" on integer constant
69
../7-seg.sx:66: error: expected identifier or '(' before numeric constant
70
../7-seg.sx:67:20: error: invalid suffix "b10110000" on integer constant
71
../7-seg.sx:67: error: expected identifier or '(' before numeric constant
72
../7-seg.sx:68:20: error: invalid suffix "b10011001" on integer constant
73
../7-seg.sx:68: error: expected identifier or '(' before numeric constant
74
../7-seg.sx:69:20: error: invalid suffix "b10010010" on integer constant
75
../7-seg.sx:69: error: expected identifier or '(' before numeric constant
76
../7-seg.sx:70:20: error: invalid suffix "b10000010" on integer constant
77
../7-seg.sx:70: error: expected identifier or '(' before numeric constant
78
../7-seg.sx:71:20: error: invalid suffix "b11111000" on integer constant
79
../7-seg.sx:71: error: expected identifier or '(' before numeric constant
80
../7-seg.sx:72:20: error: invalid suffix "b10000000" on integer constant
81
../7-seg.sx:72: error: expected identifier or '(' before numeric constant
82
../7-seg.sx:73:20: error: invalid suffix "b10010000" on integer constant
83
../7-seg.sx:73: error: expected identifier or '(' before numeric constant
84
make: *** [avr-sammlng-2.o] Fehler 1

: Bearbeitet durch User
von Innensechskant (Gast)


Lesenswert?

Du versuchst ein Assemblerprogramm mit einem C-Compiler zu kompilieren.

von Innensechskant (Gast)


Lesenswert?

Gewöhne Dir als Endung für eine Assemblerdatei am besten "asm" an.

von Oliver (Gast)


Lesenswert?

gcc kompiliert alles, was es in einer .c-Datei findet, mit dem 
C-Compiler. Der versteht nunmal kein Assembler.

Assemblercode gehört in eine eigene Datei mit der Endung .S (wichtig: 
großes S).

Oliver

von Innensechskant (Gast)


Lesenswert?

>Assemblercode gehört in eine eigene Datei mit der Endung .S (wichtig:
>großes S).

Ja. Richtig. Ob "asm" oder "S" oder sonstwas hängt von der Toolchain ab.
Sorry.

von Frank T. (frankatmicro)


Lesenswert?

Immerhin ist der AVR-Assembler schon mal angesprungen.

Groß S bringt folgende Fehler:
1
make all 
2
Building file: ../7-seg.S
3
Invoking: AVR Assembler
4
avr-gcc -x assembler-with-cpp -g2 -gstabs -mmcu=atmega32 -MMD -MP -MF"7-seg.d" -MT"7-seg.d" -c -o "7-seg.o" "../7-seg.S"
5
../7-seg.S: Assembler messages:
6
../7-seg.S:9: Error: unknown pseudo-op: `.def'
7
../7-seg.S:10: Error: unknown pseudo-op: `.def'
8
../7-seg.S:11: Error: unknown pseudo-op: `.def'
9
../7-seg.S:17: Error: constant value required
10
../7-seg.S:17: Error: register number above 15 required
11
../7-seg.S:17: Error: garbage at end of line
12
../7-seg.S:18: Error: constant value required
13
../7-seg.S:18: Error: constant value required
14
../7-seg.S:19: Error: constant value required
15
../7-seg.S:19: Error: register number above 15 required
16
../7-seg.S:19: Error: garbage at end of line
17
../7-seg.S:20: Error: constant value required
18
../7-seg.S:20: Error: constant value required
19
../7-seg.S:23: Error: constant value required
20
../7-seg.S:23: Error: register number above 15 required
21
../7-seg.S:23: Error: unknown opcode `ff'
22
../7-seg.S:24: Error: constant value required
23
../7-seg.S:24: Error: constant value required
24
../7-seg.S:26: Error: constant value required
25
../7-seg.S:26: Error: register number above 15 required
26
../7-seg.S:27: Error: constant value required
27
../7-seg.S:27: Error: constant value required
28
../7-seg.S:30: Error: constant value required
29
../7-seg.S:30: Error: register number above 15 required
30
../7-seg.S:30: Error: garbage at end of line
31
../7-seg.S:31: Error: constant value required
32
../7-seg.S:31: Error: register number above 15 required
33
../7-seg.S:31: Error: garbage at end of line
34
../7-seg.S:33: Error: constant value required
35
../7-seg.S:33: Error: constant value required
36
../7-seg.S:34: Error: constant value required
37
../7-seg.S:34: Error: constant value required
38
../7-seg.S:36: Error: constant value required
39
../7-seg.S:36: Error: constant value required
40
../7-seg.S:37: Error: constant value required
41
../7-seg.S:37: Error: constant value required
42
../7-seg.S:41: Error: constant value required
43
../7-seg.S:43: Error: constant value required
44
../7-seg.S:44: Error: constant value required
45
../7-seg.S:44: Error: register number above 15 required
46
../7-seg.S:46: Error: constant value required
47
../7-seg.S:46: Error: register number above 15 required
48
../7-seg.S:64: Error: unknown pseudo-op: `.db'
49
../7-seg.S:65: Error: unknown pseudo-op: `.db'
50
../7-seg.S:66: Error: unknown pseudo-op: `.db'
51
../7-seg.S:67: Error: unknown pseudo-op: `.db'
52
../7-seg.S:68: Error: unknown pseudo-op: `.db'
53
../7-seg.S:69: Error: unknown pseudo-op: `.db'
54
../7-seg.S:70: Error: unknown pseudo-op: `.db'
55
../7-seg.S:71: Error: unknown pseudo-op: `.db'
56
../7-seg.S:72: Error: unknown pseudo-op: `.db'
57
../7-seg.S:73: Error: unknown pseudo-op: `.db'
58
make: *** [7-seg.o] Fehler 1

Fehlt noch eine Definitionsdatei, oder was?

: Bearbeitet durch User
von Oliver (Gast)


Lesenswert?

Das Programn ist halt für den Atmel-Assembler geschrieben, nicht für den 
avr-as. Die unterscheiden sich etwas. Das kann mna allerdings 
umschreiben, wenn man undedingt will.

Am einfachsten nimmst du alleredings AVR-Studio 4.19 unter Windows.

Wenn du nicht unter Windows unterwegs bist, und auch nicht unter Wine, 
dann wäre avra der Assembler der Wahl. Allerdings musst du den dann 
selber in Eclipse integrieren, bzw. dir dafür makefiles schreiben.

Oliver

von Frank T. (frankatmicro)


Lesenswert?

Hi Oliver.

Danke für deine Erläuterungen.

avra hatte ich heute bei der Suche nach einer Lösung schon runter 
geladen.

Da hätte ich aber wieder einen Editor oder eine kleinere 
Entwicklungsumgebung gebraucht und ich wollte eigentlich bei Eclipse auf 
Ubuntu bleiben, weil mir eh schon der Kopf raucht von den vielen Infos. 
Ist ja unglaublich komplex das Thema uc's programmieren.

AVR-Studio läuft ja nicht unter Wine, soweit ich weiß.

Ist es denn schwer, den AVR-Assembler in Eclipse zu integrieren bzw. 
könntest Du es kurz erläutern oder gibt es ein Tutorial dafür?

Gruß
Frank

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Frank Thie schrieb:

> Ist ja unglaublich komplex das Thema uc's programmieren.

Es wird aber auch nicht einfacher, wenn du die verschiedenen 
Progammiersprachen durcheinander wirfst.
Was du hier gemacht hast, ist einem Kisuaheli-Japanisch Dolmetscher 
einen russischen Text vorzuwerfen. Das da nur japanischer Unsinn 
rauskommen kann (wenn überhaupt) sollte klar sein. Nur dass der 
Kisuaheli Dolmetscher sich eben lautstark darüber beschwert hat, dass 
der vorgelegte Text so gar nicht Kisuaheli ist.

von Frank T. (frankatmicro)


Lesenswert?

Hallo Karl Heinz.

Ich denke, es sind unterschiedliche Dialekte.

Da ich ja avra habe, dann könnte ich doch Eclipse als Editor verwenden 
und dann die Datei mit avra assemblieren. Kommt dann die .hex Datei 
dabei raus?
Und kennst du den Terminal-Befehl dafür?

Ich will ja die Beispiele hier auf mikrocontroller.net auf jeden Fall 
nachvollziehen und brauche daher eine Lösung.

Gruß
Frank

von Karl H. (kbuchegg)


Lesenswert?

Frank Thie schrieb:
> Hallo Karl Heinz.
>
> Ich denke, es sind unterschiedliche Dialekte.

Du denkst falsch.
Zumindest so lange, so lange du versuchst ein Assembler Programm durch 
einen C-Compiler zu schleusen.

Auf Assembler Ebene könnte man die Dialekte noch akzeptieren. Aber 
selbst dann: Ein Wiener wird sich schwer tun einen Vorarlberger zu 
verstehen. Selbst wenn beide im Prinzip Deutsch sprechen.

: Bearbeitet durch User
von Frank T. (frankatmicro)


Lesenswert?

Ich hatte versucht, das Beispielprogramm von microcontoller.net in 
Eclipse zum laufen zu bringen, wie aus dem Anfang ersichtlich.

Das funktionierte erstmal nicht, weil die falsche Dateiendung für die 
includierte Datei gewählt wurde.

Nachdem das dank Oliver korrigiert wurde, wurde der Assembler involviert 
und es stellte sich herraus, das ein anderer Dialekt benutzt wurde, so 
das immer noch Fehler gemeldet wurden.

Um jetzt konstruktiv weiter zu verfahren, hatte ich Dir ein paar Fragen 
gestellt in der Hoffnung, das Du mir weiterhelfen könntest...

Gruß
Frank

: Bearbeitet durch User
von Thomas Forster (Gast)


Lesenswert?

> Da ich ja avra habe, dann könnte ich doch Eclipse als Editor verwenden
> und dann die Datei mit avra assemblieren.

Du versuchst immer noch die Datei durch den avr-gcc C-Compiler zu 
schicken.


>Ich will ja die Beispiele hier auf mikrocontroller.net auf jeden Fall
> nachvollziehen und brauche daher eine Lösung.

Warum nimmst du dann nicht die einfachste genannte Lösung und 
installierst AVR Studio 4.19?

Als Anfänger schiesst du dir mit deiner Lösung nur ins Knie...

von Oliver (Gast)


Lesenswert?

Du kannst beliebige Assembler unter eclipse nutzen, wenn du da ein 
makefile-Projekt anlegst, und dir selber passende makefiles erstellst. 
Eclipse ist damit nicht mehr als ein Editor. Das AVR-Plugin kannst du 
mit avra nicht benutzen.

Solange du allerdings Projekte mit nur einem Sourcefile nutzt, 
assemblier das einfach von der Kommandozeile. Wie das geht, sollte in 
der avra-Doku stehen.

Oliver

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.