- LiFePO4 Speicher Test    Werbung      
Ergebnis 1 bis 10 von 17

Thema: Atmega32 mit dem AVR-GCC in Assembler programmieren

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter-Spezialist Avatar von -schumi-
    Registriert seit
    30.12.2009
    Ort
    Wasserburg am Inn / Bayern
    Alter
    32
    Beiträge
    449
    Der GCC benutzt DDRD. Aus irgend einem Grund, den ich noch nicht kenne, ist aber die Adresse, die sich hinter "DDRD" verbirgt für "OUT" und "IN" um 32 zu groß. -> 32 abziehen und passt.

    Und im Datenblatt is die Adresse eben zweimal angegeben, erst ohne Klammern, so wie sie für "OUT" und "IN" passt und dann nochmal mit klammern, so wie sie sich hinter "DDRD", "PORTD" usw. verbirgt...

    Was das jetzt alles auf sich hat -> Ich weis es (noch) nicht... Aber damit funktioniert es zumindest schonmal so weit...

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von -schumi-
    Registriert seit
    30.12.2009
    Ort
    Wasserburg am Inn / Bayern
    Alter
    32
    Beiträge
    449
    Ok, hab mir jetzt mal die sfr_defs.h angeschaut, oben steht:
    The \c <avr/sfr_defs.h> file is included by all of the \c <avr/ioXXXX.h>
    files, which use macros defined here to make the special function register
    definitions look like C variables or simple constants, depending on the
    <tt>_SFR_ASM_COMPAT</tt> define. Some examples from \c <avr/iocanxx.h> to
    show how to define such macros:


    \code
    #define PORTA _SFR_IO8(0x02)
    #define EEAR _SFR_IO16(0x21)
    #define UDR0 _SFR_MEM8(0xC6)
    #define TCNT3 _SFR_MEM16(0x94)
    #define CANIDT _SFR_MEM32(0xF0)
    \endcode


    If \c _SFR_ASM_COMPAT is not defined, C programs can use names like
    <tt>PORTA</tt> directly in C expressions (also on the left side of
    assignment operators) and GCC will do the right thing (use short I/O
    instructions if possible). The \c __SFR_OFFSET definition is not used in
    any way in this case.


    Define \c _SFR_ASM_COMPAT as 1 to make these names work as simple constants
    (addresses of the I/O registers). This is necessary when included in
    preprocessed assembler (*.S) source files, so it is done automatically if
    \c __ASSEMBLER__ is defined. By default, all addresses are defined as if
    they were memory addresses (used in \c lds/sts instructions). To use these
    addresses in \c in/out instructions, you must subtract 0x20 from them.


    For more backwards compatibility, insert the following at the start of your
    old assembler source file:


    \code
    #define __SFR_OFFSET 0
    \endcode
    Und es funktioniert sogar :-D

    Code:
    #include <avr/io.h>        
    #define _SFR_ASM_COMPAT 1
    #define __SFR_OFFSET 0                                    
    .text
    .global main
    main:
        
        LDI r24, 255
        OUT DDRD, r24
        
        LDI r24, 255
        OUT PORTD, r24
            
        Hauptschleife:
            rjmp Hauptschleife

Ähnliche Themen

  1. Frage zum Programmieren im Assembler
    Von Toni224 im Forum PIC Controller
    Antworten: 11
    Letzter Beitrag: 12.02.2010, 18:13
  2. IRQ Programmieren in Assembler
    Von cmc im Forum Assembler-Programmierung
    Antworten: 6
    Letzter Beitrag: 08.03.2007, 11:12
  3. ASURO in Assembler programmieren!
    Von Ronny10 im Forum Asuro
    Antworten: 0
    Letzter Beitrag: 06.01.2007, 13:30
  4. Wie in Assembler programmieren?
    Von Jens im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 5
    Letzter Beitrag: 22.04.2006, 16:34
  5. Voyage 200 in Assembler programmieren?
    Von Murus im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 11
    Letzter Beitrag: 04.10.2005, 19:10

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

    Werbung      fchao-Sinus-Wechselrichter AliExpress