-         
Ergebnis 1 bis 7 von 7

Thema: "Assamblerfunktionen" in C importieren?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    20.11.2007
    Beiträge
    24

    "Assamblerfunktionen" in C importieren?

    Anzeige

    Hallo,
    ich hab schon einige Sachen in Assembler gecodet. Nun will ich aber auf C umsteigen, da es mir auf dauer zu anstregned und umständlich wird (die Projekte werden immer größer). Da ich aber auf meine bisher geschriebenen Routinen nicht verzichten möchte Suche ich jetzt eine möglichkeit, ohne viel aufwand meine bisher geschriebenen sachen in ein C-Header-File zu importieren. Mir schwebt so etwas vor wie dass ich die Funktion in einem Haderfile deklarire (in C) in welchem das Assamblerefile gealden wird und dass diese Funktion einfahc die Assamblerfunktion aufruft.
    Beispiel:
    Assamblerfunktion.inc
    _irgendwas
    mov bla
    addwf blub
    call _irgendwas2 ;ebenfalls in dem file-deklariert
    return

    C-Header:
    #include assamblerfunktion.inc

    void irgendwas(void)
    {
    "call _irgendwas"
    return;
    }

    Is das möglich? und wenn ja wie?

    Nebenfrage: Wie schreib ich in C was ins Workingregister?
    ich hoffe jemand versteht was ich will und kann mir helfen
    liebe Grüße Kante

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    wenn du avr-gcc verwendest, kannst du deine asm-files im makefile unter asm-quellen auflisten:
    Code:
    # List Assembler source files here.
    #     Make them always end in a capital .S.  Files ending in a lowercase .s
    #     will not be considered source files but generated files (assembler
    #     output from the compiler), and will be deleted upon "make clean"!
    #     Even though the DOS/Win* filesystem matches both .s and .S the same,
    #     it will preserve the spelling of the filenames, and GCC itself does
    #     care about how the name is spelled on its command-line.
    ASRC = ... (hier die asm-quelltexte mit leerzeichen getrennt)
    einzelne anweisungen gehen mit
    Code:
    asm("ldi  R18,0xEC");
    gruesse

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.683
    Da gibts doch den "inline Assembler"
    https://www.roboternetz.de/wissen/in...ler_in_avr-gcc
    aber so weit bin ICH noch nicht - habs noch nicht ausprobiert, aber ich stolpere dauernd über diese Codeschnippsel in den C-Beispielen.
    Ciao sagt der JoeamBerg

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    20.11.2007
    Beiträge
    24
    Hy,
    nein benutze MPLAB. Programmiere auch PICs un keine Avrs.
    Das Problem mit den Inlines ist, dass ich nicht weis wie ich darin aufrufe von anderen Assemblerfunktionen realisieren soll.
    mfg Kante

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    =1=
    es gibt unterschiedliche AVR assembler dialekte
    Wenn du inline assembler verwenden willst, muss dein code in gnu AVR assembler geschriebwn sein (und nicht in atmel assembler, was bei dir offenbar der fall ist).

    zum umwandeln geht
    -a- umschreiben
    -b- hex erstellen und mit avr-objdump disassemblieren (sind dann aber die ganzen schönen bezeichner weg, weil hex has nicht speichert)

    =2=
    wenn du nich assembler benutzen willst sondern binärdateien (objecs) dann muss
    -a- das objektformat passen (zb elf32-avr)
    -b- section infos etc stimmen
    -c- das object darf *net* lokatiert sein, es bringt also nix, ein *.hex in ein *.o umzuwandeln.

    =3=
    Dein Code muss dem avr-gcc abi entsprechen, siehe

    https://www.roboternetz.de/wissen/in...sterverwendung

    alternativ kannst nun wrapper (zb inline assembler oder assembler) schreiben, der als interface zwischen deiner assembler-abi und der avr-gcc abi dient

    abi=application binary interface
    Disclaimer: none. Sue me.

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.683
    Zitat Zitat von SprinterSB
    =1=
    =2=
    =3=
    Huiii - so viel, so klar - da macht ja das Lernen richtig Spass!

    Zitat Zitat von SprinterSB
    zum umwandeln geht
    -a- umschreiben
    -b- hex erstellen und mit avr-objdump disassemblieren...
    Kann man denn nicht erst -b- und dann mit dessen Hilfe danach -a- ?

    Ich meine, ich bin noch nicht so weit, noch kämpfe ich mich durch meine Anfangsgründe "C" - aber mit AVR-Assembler bin ich vor drei Monaten in die µC-Thematik eingestiegen (vorbelastet mit 8086- und Z80-Assembler - na ja, das ist eigentlich schon alles vergessen). Aber das Thema interessiert schon, weil ich merke/lese, dass eben nicht ALLES in C zu gehen scheint.
    Ciao sagt der JoeamBerg

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2007
    Ort
    München
    Alter
    55
    Beiträge
    198
    ein schönes Beispiel, wie man Gnu Assembler Files als *.S in C einbindet, findet sich in der I2C Library von Peter Fleury, und zwar die Software- Implementierung des I2C Master, die an jedem AVR Pin auch ohne TWI Modul geht:

    http://homepage.hispeed.ch/peterfleu...ware.html#libs

Berechtigungen

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