Assembler als File in C einbinden

(Firma: privat) #3794084
Lesenswert?

Hallo zusammen,
ich versuche gerade einen Assembler Code in einem GCC C Projekt mit 
Atmel Studio zu integrieren.

Der Grund: Ich möchte ein Projekt in Assembler schreiben, da vieles in 
dem Projekt sehr stark von der Zeit abhängig ist und diese in Assembler 
besser ausgerechnet werden kann. Da meine Kenntnisse und fertigkeiten 
noch nicht so ausgeprägt sind, schreibe ich vieles zunächst in C um die 
Übersicht zu behalten (später wird dann alles in Assembler übersetzt).

Nun stehe ich vor dem Problem, dass der Code, der in einem AVR Assembler 
Projekt funktioniert. Als Item eingebunden in einem GCC C Projekt nicht 
funktioniert.

Der Befehl out bewirkt garnichts. Nach etwas ausprobieren habe ich alle 
Ausgaben an PORTD mit sts gemacht (ist das richtig?) und die Ausgabe 
scheint zu funktionieren.

Nach dieser Änderung tut aber leider keine Funktion was sie soll (=das 
LCD mach keine Ausgabe). Um den Fehler zu suchen habe ich Schritt für 
Schritt endlosschleifen im Assembler Code eingebaut und die Ausgabe an 
PORTD mit einer LED geprüft. Bei jeder Prüfung lag das richtige 
Bitmuster an PORTD an.

Was mach ich falsch?

lcd-routines.asm ist die funktionierende Form im Assembler Projekt
lcd-routines.S ist die nicht funktionierende Form im C Projekt

Ich danke schonmal jedem für Hinweise.
Angehängte Dateien:
Gast #3794179
Lesenswert?

Info direkt aus dem Atmel Handbuch:

4. When using the I/O specific commands IN and OUT, the I/O addresses
0x00 - 0x3F must be used.
When addressing I/O Registers as data space using LD and ST 
instructions, 0x20 must be added to these addresses.

Johann L. schrieb:
> STS, ST und STD funktionieren auch im SFR-Bereich.

Danke für die Info. Habe ich bisher nie verwendet. Werde beim nächsten 
Projekt mal testen.
(Firma: privat) #3794214
Lesenswert?

Johann L. schrieb:
> Verwende doch einfach die lcd-routines.asm. Wenn die in GNU-Assembler
> steht einfach mit$ avr-gcc -c -x assembler-with-cpp lcd-routines.asm -o
> lcd-routines.o <OPTIONEN>
> übersetzen und dann linken wie ein normales compiliertes C-Modul.

Ich müsste leider noch hinzufügen, dass ich mit Atmel Studio noch so 
ziemlich gar nicht umgehen kann.

Wie kann ich das mit Atmel Studio machen?

Peter Dannegger schrieb
>Schau Dir einfach mal unter Examples die asmdemo an.

Danke für den Hinweis
Das Makro hab ich gefunden und kann dessen Funktion nachvollziehen.
Währe ja für mich also STS richtig.
(fragt sich höchstens warum es in dem Assembler Projekt funktionierte)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren