C-Variable in ARM-Assembler nutzten

Gast #622805
Lesenswert?
• ▲
▼
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.
Gast #623116
Lesenswert?
• ▲
▼
Ü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.
#623457
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.