C und Assembler Kombinieren

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hat jemand Erfahrungen wie man C und Assembler kombinieren kann. Ich komme aus der µC Ecke und benutze dort das AVR Studio zum Programmieren. Hier ist es sehr einfach dies zu tun. Nun beschäftige ich mich mit dem RasPi und würde gerne für bestimmte Sachen direkt mit dem Prozessor sprechen.

    Danke
    Thomas

  • Hallo.

    Hier mal 2 links, die Dir evtl. weiterhelfen.
    1. Welche Sprachen kann er.
    2. Assembler auf dem rpi.
    Eine Kombination von beiden für raspi kenn ich leider nicht.
    Komme selbst aus der µC Ecke und habe mit dem SDCC Compiler gearbeitet, der in meinen Augen ideal dazu war.
    siehe:

    Zitat

    the ability to add inline assembler code anywhere in a function.


    Aber... in Assembler auf dem raspi... willst Dir das wirklich antun ?
    Versuch lieber C richtig zu verstehen.
    Mit ner guten Library z.B gpio geht damit sehr viel..., aber will Dich nicht beeinflussen.

    gruß root

    Einmal editiert, zuletzt von root (17. Dezember 2014 um 20:22)

  • Hallo root,

    danke für die Antwort. Die Links kannte ich bereits. Helfen aber leider nicht wirklich weiter. Inline sollte bei dem GCC auch auf dem RasPi kein Problem sein. Mir ging es ehe darum Funktionen in einem separaten File in Assembler zu Coden und diese dann durch das definieren in " C" als

    extern void myAssFunction();

    zu definieren. Das funktioniert im AVR Studio lediglich durch Rechtsklick in dem man die entsprechende Assemblerdatei zum Projekt hinzufügt. Deshalb habe ich mich mit den im Hintergrund laufenden "Prozessen" welche Compiler. Assembler und Linker so steuern das am Ende eine lauffähiges Executable herauskommt nicht beschäftigt. Zudem wird das unter Linux sicher alles etwas anders laufen. Ich kenne weder Linux noch den RasPi gut oder die existierenden CrossCompiler.

    Deshalb wäre es schön jemanden zu finden, der das schon mal gemacht hat. Das kann unter umständen wochenlanges Herumprobieren ersetzen. Irgendwie sollte das doch mit den Gnu Tools und Eclipse gehen. Nur wie?


    Thomas

  • Die Frage ist wirklich, wozu das gut sein soll ?

    Das bringt hoechstens was wenn der Prozessor irgendwelche Instruktionen
    kennt die man mit C nicht ansprechen kann. Oder um wirklich Low-Level
    Sachen zu machen wie FLASH-Funktionen die sich ins RAM kopieren und
    dann die Firmware neu schreiben.

    Oder vielleicht noch ein Graphik-Treiber, weil es bei Millionen von Pixeln
    halt wirklich auf jede Mikrosekunde ankommt.

    Aber sonst ?


  • Deshalb habe ich mich mit den im Hintergrund laufenden "Prozessen" welche Compiler. Assembler und Linker so steuern das am Ende eine lauffähiges Executable herauskommt nicht beschäftigt. Zudem wird das unter Linux sicher alles etwas anders laufen. Ich kenne weder Linux noch den RasPi gut oder die existierenden CrossCompiler.


    Ja gut.
    Aber dann stelle ich auch die Frage.
    Was willst mit dem Raspi machen ? Dir selbst beweisen dass (wenn Du Linux gar nicht kennst) mit irgendwelchen Assembler inline Befehlen im gcc was zu machen ist?
    Willst HighTech Realtime Anwendungen schreiben ?...ist der raspi das falsche Gerät...
    Da Du ja aus der µC Ecke kommst ist Dir ja bekannt dass Du dann die Prozessorarchitektur sehr genau kennen musst...aber ok.
    Würde Dir da empfehlen, bleibt auf der µC oder x86 Architektur.
    siehe :

    Code
    push af


    oder

    Code
    pop de


    ...da darf man noch pushen oder ...;)
    Da kannst Dich nach allen Regeln der Kunst austoben,und ist ohne Linux Kentnisse verständlicher.
    Aber...nix für ungut... dess Menschen Wille ist sein Himmelreich.

    gruß root

    Einmal editiert, zuletzt von root (18. Dezember 2014 um 03:13)

  • Es scheint ein seltsames und unschönes Phänomen zu geben, dass wenn offensichtlich niemand eine Antwort auf eine Frage weiß, versucht wird die Frage selbst bzw. die Beweggründe oder die Absichten des Fragestellers in Abrede zu stellen.

  • > Es scheint ein seltsames und unschönes Phänomen zu geben, dass wenn
    > offensichtlich niemand eine Antwort auf eine Frage weiß, versucht wird die
    > Frage selbst bzw. die Beweggründe oder die Absichten des Fragestellers in
    > Abrede zu stellen.
    Nu ja, die meisten Leute machen das halt wirklich nur wenn es nicht anders
    geht.

    Aber manche muessen erst selber erkennen, dass es sinnlos ist.

    testincrement.c

    increment.s

    Code
    .global     increment
    increment:
       add         r0, r0, #1
       mov         pc, lr

    Uebersetzen und linken

    Code
    gcc -o testincrement testincrement.c increment.s

    Weiterhin viel Erfolg und tschuess ....

    Einmal editiert, zuletzt von Tell (20. Dezember 2014 um 12:39)

  • Hallo Thomas,

    meinst Du so?

    Code
    asm(
    "mov     r0, r0\n\t"
    "mov     r0, r0\n\t"
    "mov     r0, r0\n\t"
    "mov     r0, r0"
    );

    Wenn ja lautet das Suchstichwort:

    Zitat

    ARM GCC Inline Assembler

    Einen Einsteiger-Link hätte ich auch: http://www.ethernut.de/en/documents/arm-inline-asm.html

    Aber da muss ich meinen Vorrednern zustimmen: Einfach so Assembler-Code einbauen funktioniert nicht. Du musst Dich mit dem Prozesser auseinandersetzen, für den Du in Assembler lauffähige Programme oder Routinen schreiben möchtest.

    (Fast) Alles, was Du für andere Prozessoren gelernt hast, darfst Du neu lernen, wenn es an den ARM-Prozessor geht.

    Ich denke, dass Du in dem Link für den Anfang alles Wichige findest.

    Viel Spaß beim Coden von Inline-Assembler!

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Danke für die Antworten und Tips zum Inline Assembler. Mir ging es um das einbinden externer Assembler Dateien. Ich habe durch viele Jahre Assembler Coden auf ARM Architekturen eine Menge an Code den ich so wiederverwenden möchte. Inline ist keine Option.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!