Kann die Datei m328def.inc für avr-as nicht finden

Gast #4284206
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
Gast #4284261
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
#4284368
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.
Gast #4284414
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
Gast #4284416
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
#4284457
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>.
#4284503
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
Gast #4284513
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
Gast #4284517
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
#4285872
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.

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