Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » Frage zur Programmiersprache C » Themenansicht

Autor Thread - Seiten: -1-
000
26.01.2008, 00:10 Uhr
Rüdiger
Administrator
Avatar von Rüdiger

Wie greift man unter C (8 Bit) lesend bzw. schreibend auf die Register des U880-Prozessors zu?
Ich meine damit nicht die Speicherklasse "Register".
--
Kernel panic: Out of swap space.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
26.01.2008, 08:49 Uhr
marko_oette



Ich persönlich weiß (bis jetzt) nicht, wie das direkt geht.

In C entscheidet der Compiler, wie mit Variablen umgegangen wird.

Es gibt das "register" Schlüsselwort, welches den Compiler anweist, die Variable nach Möglichkeit in das Register der CPU und nicht auf den Stack zu legen.

Bsp:

void test()
{
register short nReg = 107;
}

Du kannst dir aber auf jeden Fall mit Assembler Code weiter helfen.
--
Bitte - wenn nötig - Kontakt via Email, ich bin selten im Forum.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
26.01.2008, 11:06 Uhr
Rüdiger
Administrator
Avatar von Rüdiger


Zitat:
marko_oette schrieb
Es gibt das "register" Schlüsselwort, welches den Compiler anweist, die Variable nach Möglichkeit in das Register der CPU und nicht auf den Stack zu legen.

Das was Du beschreibst, ist die Speicherklasse "Register", die nützt mir hier nichts.
Wegen eines MV-Befehls eine Assemblerdatei einzubinden, will ich nach Möglichkeit vermeiden. Da muss es doch eine bessere Möglichkeit geben...
--
Kernel panic: Out of swap space.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
26.01.2008, 13:01 Uhr
Tom Nachdenk



Inline-Assemblercode? Sowas dürfte gerade bei 'alten' Compilern sehr vom verwendeten Modell abhängen. Gibts denn da keine Library-Funktion fürs kopieren?
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
26.01.2008, 13:33 Uhr
marko_oette



Hallo zusammen,

ich wusste nicht dass du mit "Speicherklasse" das Schlüsselwort meinst. Wie gesagt, etwas anderes außer ASM ist mir nicht bekannt. Das muss ja aber nicht heißen, dass es nicht trotzdem irgendwie geht. - Wo kommt der Begriff "Speicherklasse" her? Der ist mir neu.

@Tom: Man kann in dem Falle ja auch die Funktion komplett in Assembler programmieren, diesen Code assemblieren und die Funktion dann via "extern" Schlüsselwort im C Code verwenden. Den Rest erledigt der Linker.
--
Bitte - wenn nötig - Kontakt via Email, ich bin selten im Forum.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
26.01.2008, 14:05 Uhr
Rüdiger
Administrator
Avatar von Rüdiger


Zitat:
marko_oette schrieb
Wo kommt der Begriff "Speicherklasse" her? Der ist mir neu.

Siehe
"Systemunterlagendokumentation MOS K1520 Anwenderdokumentation C-Compiler" von Robotron, S.26
oder
"Claßen / Oefler: UNIX und C - Ein Anwenderhandbuch", Verlag Technik Berlin, S. 164


Zitat:
Man kann in dem Falle ja auch die Funktion komplett in Assembler programmieren, diesen Code assemblieren und die Funktion dann via "extern"
Schlüsselwort im C Code verwenden. Den Rest erledigt der Linker.

Genau das mach ich auch. Ich habe assemblierten Code (ohne Quelltext), der über Prozessor-Register mit dem C-Hauptprogramm Daten austauschen soll.
--
Kernel panic: Out of swap space.

Dieser Beitrag wurde am 26.01.2008 um 14:08 Uhr von Rüdiger editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
26.01.2008, 16:03 Uhr
Tom Nachdenk




Zitat:
marko_oette schrieb
@Tom: Man kann in dem Falle ja auch die Funktion komplett in Assembler programmieren, diesen Code assemblieren und die Funktion dann via "extern" Schlüsselwort im C Code verwenden. Den Rest erledigt der Linker.

Jain, so einfach ist das nicht. Man muss dazu schon die Aufrufkonventionen des C-Compilers kennen und externe Code muss dem dann auch entsprechen . So wie ich Rüdiger verstanden habe ging es aber darum eine optimierte Version einer Problemlösung inline zu verwenden. z.B. weil der C-Compiler bestimmte Befehle der CPU nicht benutzt. Hat er aber klargestellt das es darum geht externen Code der möglicherweise ganz anderen Konventionen folgt einzubinden. Sollte ebenso möglich sein, ist aber Compilerabhängig.
Evtl.hilft es eine entsprechende Funktion zu konstruieren, dann statt des compilergenerierten Codes dann den eigenen Code (also Register vom Stack laden, Routine aufrufen, Ergebniswerte entsprechend in Variablen speichern, Rückgabewert definieren) einfügen und das dann als 'extern' Assemblerdatei einzubinden.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek