Forum: Mikrocontroller und Digitale Elektronik Kann die Datei m328def.inc für avr-as nicht finden


von atmega328 (Gast)


Lesenswert?

Wie im Titel beschrieben, habe ich ein Problem dabei, die Include Datei 
für den Atmega328 zu finden. Ich habe eine Datei gefunden, die 
anscheinend für AVRStudio ist und die bei mir nur Fehler ausspuckt, das 
keine ; am Ende der Zeilen sind. 
Beitrag "m328def.inc Datei für den ATmega328 bzw. ATmega328P gesucht"

Ich arbeite mit Linux und avr-asm

von S. Landolt (Gast)


Lesenswert?

Das zip-File für avrasm2 unter
http://www.vfx.hu/avr/index.html
beinhaltet sehr viele inc-Dateien.

von atmega328 (Gast)


Lesenswert?

Ok, danke ich hab da zwar eine gefunden, ist aber die gleiche, die ich 
bereits habe. Mein Compiler meckert das die Zeilen nicht mit ; enden. 
(nicht alle aber die, die ohne ; enden da meckert er)

mfg

von atmega328 (Gast)


Lesenswert?

Keiner eine Idee?

von Stefan E. (sternst)


Lesenswert?

avr-as nicht direkt aufrufen, sondern über das gcc-Frontend. Diesem den 
korrekten mcu-Parameter mitgeben. Im Code avr/io.h inkludieren.

von Flip (Gast)


Lesenswert?

.inc ist für assembler, du suchst vermutlich etwas andres. Du sichst 
eine headerdatei für den compiler? Welche sprache willst du benutzen?

von Alexander S. (alesi)


Lesenswert?

atmega328 schrieb:
> Keiner eine Idee?

Wir rufst Du avr-as auf?
Ich bin mir nicht sicher, ob man bei avr-as die controller-spezifischen
Parameter einbinden muss. Versuche mal
> avr-as -mmcu=atmega328 -o name.o name.s

Verschiedene Assembler haben unterschiedliche Syntax. Die
Syntax beim avr-as ist anders als beim Atmel Assembler.
avra (unter Linux) benutzt eine ähnliche Syntax wie der Atmel Assembler.

von atmega328 (Gast)


Lesenswert?

Danke euch erstmal!

@Stefan wie meinst du, das gcc frontend? Ich habe Assembler Code.

@Flip Ich will Assembler Code assemblieren.

@Alexander Ich rufe das ganze so auf
1
avr-as -g -mmcu=atmega328p -o demo.o demo.asm
2
avr-ld -o demo.elf demo.o
3
avr-objcopy -O ihex -R .eeprom demo.elf demo.hex
4
avrdude -C /etc/avrdude.conf -p atmega328p -c arduino -P /dev/ttyACM0 -b 115200 -D -U flash:w:demo.hex:i

von atmega328 (Gast)


Lesenswert?

PS: Es funktioniert ja auch, wenn ich die verwendeten Konstanten in der 
selben Datei definiere aber eine include Datei wäre schon toll um nicht 
jedes mal alle Ports etc neu zu definieren.

Außerdem funktioniert (vermutlich deswegen) der Befehl .def nicht.

mfg

von Stefan E. (sternst)


Lesenswert?

atmega328 schrieb:
> Stefan wie meinst du, das gcc frontend? Ich habe Assembler Code.

GCC steht für GNU-Compiler-Collection und ist nicht auf C beschränkt.
Benutze .S (großes S) als Extension, oder alternativ die Option "-x 
assembler-with-cpp", und dann ersetzt du avr-as durch avr-gcc.
BTW: Den Linker will man eigentlich auch nicht direkt aufrufen.

atmega328 schrieb:
> aber eine include Datei wäre schon toll

Und diese Inklude-Datei heißt <avr/io.h>.

von serial (Gast)


Lesenswert?

oh ok, und wie kann ich avr/io.h dann in meinem Assemblercode einbinden?

von serial (Gast)


Lesenswert?

Etwa mit .INCLUDE "avr/io.h" ?

von Stefan E. (sternst)


Lesenswert?

1
#include <avr/io.h>

von serial (Gast)


Lesenswert?

Ich möchte aber Assembler lernen, C kann ich schon!

von serial (Gast)


Lesenswert?

Bzw im Simulator kann ich Assembler auch schon, jetzt möchte ich es aber 
"in echt" probieren.

von Alexander S. (alesi)


Lesenswert?

Stefan E. schrieb:
> atmega328 schrieb:
>> Stefan wie meinst du, das gcc frontend? Ich habe Assembler Code.

Vielleicht sind diese Seiten hilfreich:

http://www.nongnu.org/avr-libc/user-manual/index.html

Speziell
http://www.nongnu.org/avr-libc/user-manual/assembler.html
"...
For the purpose described in this document, the assembler and linker are
usually not invoked manually, but rather using the C compiler frontend
(avr-gcc) that in turn will call the assembler and linker as required.
..."

http://www.nongnu.org/avr-libc/user-manual/group__demo__project.html

von serial (Gast)


Lesenswert?

Ach egal, ich glaube ich kann einfach  nicht erklären was ich meine. Ich 
frag mal anders: Wieso wird die include Datei in dem Code nicht gefunden 
und wieso funktioniert .def nicht?
1
.nolist
2
.include "m328def.inc"
3
.list
4
5
.def meinRegister = r16
6
7
RJMP main
8
9
main:
10
  LDI meinRegister, 0b11111111
11
  OUT DDRB, meinRegister
12
  
13
loop:
14
  LDI meinRegister, 0x00
15
  OUT PORTB, meinRegister
16
  LDI meinRegister, 0xFF
17
  OUT PORTB, meinRegister
18
  
19
RJMP loop

von serial (Gast)


Lesenswert?

edit: wieso wird die include Datei nicht erkannt? liegt im selben 
Verzeichnis

von serial (Gast)


Lesenswert?

Wenn ich das ganze so schreibe funktioniert es
1
.equ RAMEND, 0x4FF        ;Last On-Chip SRAM Location
2
.equ SREG, 0x3f     ;liegt auf Adresse 3F
3
.equ SPL, 0x3d      ;Stack Pointer Low Register
4
.equ SPH, 0x3e       ;Stack Pointer High Register
5
.equ PORTB, 0x05    ;Port B Data Register
6
.equ DDRB, 0x04      ;Port B data direction register 1=output 0=input
7
.equ PINB, 0x03      ;Port B Input pins address
8
9
RJMP main
10
11
main:
12
  LDI r16, 0b11111111
13
  OUT DDRB, r16
14
  
15
loop:
16
  LDI r16, 0x00
17
  OUT PORTB, r16
18
  LDI r16, 0xFF
19
  OUT PORTB, r16
20
  
21
RJMP loop

von serial (Gast)


Lesenswert?

@Stefan Tut mir leid, ich glaube jetzt versteh ich was du meinst. Der 
gcc Compiler bindet die Definitionen von selbst richtig ein, oder wie?

von Alexander S. (alesi)


Lesenswert?

Hallo,

bei mir unter Debian befindet sich ../avr/io.h unter *

/usr/lib/avr/include/avr/io.h

Oben in der Datei io.h wird beschrieben, wie das funktioniert:
...
    This header file includes the apropriate IO definitions for the
    device that has been specified by the <tt>-mmcu=</tt> compiler
    command-line switch.  This is done by diverting to the appropriate
    file <tt>&lt;avr/io</tt><em>XXXX</em><tt>.h&gt;</tt> which should
    never be included directly.  Some register names common to all
    AVR devices are defined directly within 
<tt>&lt;avr/common.h&gt;</tt>,
    which is included in <tt>&lt;avr/io.h&gt;</tt>,
    but most of the details come from the respective include file.
...

* bei mir sind avr-libc und gcc-avr installiert.

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.