Porting the GCC to 8051-Microcontroller ? Register Banks
Anja Müller
Mueller-Lehnitz@t-online.de
Wed Dec 22 09:00:00 GMT 1999
Hallo,
Im Rahmen einer Studienarbeit möchte ich versuchen, den GCC für den
8-Bit-Microcontroller 8051 von Intel zu portieren. Diesbezüglich bin
gearde dabei, die Machine Macros (*.h-Datei) zu definieren. Dabei habe
ich folgendes Problem:
Der 8051-Mircocontroller besitzt 4 Register-Bänke, die jeweils aus 8
"R"-Registern R0,...,R7 bestehen. Zu einem Zeitpunkt kann jedoch nur
eine dieser Register-Bänke aktiv sein. Das Umschalten zwischen den
Bänken erfolgt
über das Program Status Word Register (PSW), in dem zwei Bit eigens
dafür reserviert sind, die aktive Register Bank zu setzen. Wenn also
z.B. Bank 0 aktiv sein soll, müssen die entsprechenden Bits im
PSW-Register auf "00" gestezt werden, wenn Bank 1 aktiv sein soll, auf
"01", und so weiter ...
Mein Problem besteht nun darin, wie man das Vorhandensein dieser
Register-Bänke in den Maschinen-Makros definieren kann. Ich habe leider
keine äquivalente Zielmaschine gefunden, die bereits vom GCC unterstützt
wird. Das Vorhandensein von Register-Bänken ähnelt mehr einer
RISC-Architektur, jedoch im Grunde genommen hat der 8051 eine CISC-CPU,
d.h. es gibt auch viele akkumulator-orientierte Befehle sowie einen
Stack, der z.B. zur Argumenten-ÃÂbergabe bei Funktionen benutzt werden
kann. Es wäre jedoch von grossem Vorteil, auch die vielen "R"-Register
der Register-Bänke nutzen zu können. Die Frage ist jedoch, wie man
Register-Bänke in den
Machinen-Macros definieren kann, also z.B. in den Macros
FIXED_REGISTERS, CALL_USED_REGISTERS, usw..
Kennen Sie eine Maschine,die bereits vom GCC unterstützt wird und die
Register-Bänke oder einen ähnlichen Registersatz aufweist wie der 8051 ?
Oder haben Sie eine Idee oder einen Tip, wie man an diese Sache
herangehen könnte ? Das wäre sehr hilfreich.
Desweiteren gibt es noch folgendes Problem:
Der 8051 ist ein 8-Bit-Microcontroler, d.h. die meisten seiner Register
sind 8 Bit breit und auch der Speicher ist nur byteweise adressierbar.
Der externe Datenspeicher und auch der separate Programmspeicher werden
jedoch über
16-Bit-Adressen adressiert. Dafür steht ein 16-Bit-Register zur
Verfügung, der sogenannte Datenpointer DPTR. Der Programm-Counter PC ist
auch 16 Bit breit, er kann jedoch nicht explizit angesprochen werden.
Dadurch gibt
es nun zumeist 8-Bit-Register aber auch ein einzelnes 16-Bit-Register
(DPTR), welches jedoch auch byteweise adressiert werden kann, nämlich
Low- und Highbyte extra. Wie kann man diese Gegebenheiten in den
Maschinen-Makros umsetzen ? (Geht der GCC nicht davon aus, dass alle in
FIXED_REGISTERS, ... usw. benannten Register dieselbe Breite aufweisen?)
Vielen Dank für ihre Hilfe !
Anja Müller
More information about the Gcc
mailing list