Hi Für ein C-Projekt, das ich momentan schreibe versuche ich gerade eine Zeitkritische Funktion in Assembler zu schreiben. Allerdings muss diese Funktion auf globale Variablen zugreifen. Bisher probiere ich es so: /* .C-Datei */ ... int *ptrGX; ... /* .s-Datei */ ... .extern ptrGX ; Aus Übersichtlichkeitsgründen ... mov r3,#ptrGX ; Adresse der Variablen in Register laden ... Allerdings kommt dann folgende Fehlermeldung von dem arm-gas: "Error: undefined symbol ptrGX used as an immediate value". Versuche, das Symbol ptrGX mit .def (Laut mitgeliefertem Manual) scheitern an der einfachen Tatsache, das gas dann meldet, dass er diesen Befehl nicht kennt. Ich hoffe hier kann mir jemand helfen Mfg Michel.
Übergib den Pointer auf ptrGX mit dem Funktionsaufruf. Und dann arbeite in der Assembler routine mit dem Pointer. Abgesehen warum Assembler ? Wenn du die C-Funktion effizient schreibst, dann macht der Compiler schnelleren und kompakteren Code als 99% aller "Assemblefreaks" hinbekommen. Und als Hobbyprogrammierer der mit Assembler anfängt, hast du keine Chance auf effizienten Assemblercode. Es fehlt schlicht und einfach die jahrelange Erfahrung. Assembler ist auf dem ARM nur für wenige Registerzugriffe notwendig.
Üblicherweise werden C-Symbole (also Funktionsnamen, Variablen etc.) für den Linker mit einem vorangestellten Unterstrich versehen. Probiere mal folgendes aus: /* .s-Datei */ ... .extern _ptrGX ; Aus Übersichtlichkeitsgründen ... mov r3,#_ptrGX ; Adresse der Variablen in Register laden ...
Das habe ich mir auch schon überlegt, aber ich benutzte zu viele Pointer, so dass der Stack benutzt würde, und das möchte ich vermeiden. Zudem ist dieses Projekt eine "Spielwiese" um die verschiedenen Techniken auszuprobieren und zu dokumentieren, damit andere Personen in der Abteilung bzw. ich bei späteren Projekten einen einfacheren Einstieg haben. Warum Assembler? Einfach, weil es schneller ist. Mir ist durchaus bewusst, das effizienter C-Code sehr schnell ist, und das man Assembler auch langsam programmieren kann, aber dennoch sind meine Assemblerroutinen deutlich schneller als die entsprechende C-Routinen, auch bei höchster Optimierungsstufe. Und nein, ich bin eigentlich kein Hobbyprogrammierer und ich habe schon einige Assemblererfahrung, nur eben noch keine mit gcc, gas und einem Arm.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.