Forum: Mikrocontroller und Digitale Elektronik Erste 8051-Derivate mit mehreren dptr


von Philipp Klaus K. (pkk)


Lesenswert?

Welches waren die ersten 8051-Derivate mit mehreren dptr? Siemens hatte 
soweit ich weiß, mit dem 80C517 das erste Derivat mit 8 dptr. Aber es 
soll wohl auch frühe Varianten mit 2 dptr von AMD gegeben haben. Weiß 
jemand mehr zu denen?
Welche waren die ersten mit:
DPL1 auf 0x84, DPH1 auf 0x85, DPS auf 0x86.0?

Philipp

von Philipp Klaus K. (pkk)


Lesenswert?

Habe nun den AMD 80C521 gefunden. Das scheint ein guter Kandiat für die 
erste dual-dptr-Variante zu sein. Oder kennt jemand einen noch älteren?

Philipp

von Dieter W. (dds5)


Lesenswert?

Da könnte durchaus auch ein Derivat von Philips/NXP oder Dallas in Frage 
kommen aber das heraus zu Suchen wird eine echte Fleißarbeit...

von Lothar (Gast)


Lesenswert?

Philipp Klaus K. schrieb:
> Welches waren die ersten 8051-Derivate mit mehreren dptr

Ist das eine Prüfungsaufgabe? Aktuelle 8051 z.B. EFM8 haben wieder nur 
ein DPTR da Zugriff aufs externe RAM ohnehin mit DMA gemacht wird.

von Philipp Klaus K. (pkk)


Lesenswert?

Lothar schrieb:
> Philipp Klaus K. schrieb:
>> Welches waren die ersten 8051-Derivate mit mehreren dptr
>
> Ist das eine Prüfungsaufgabe?

Eigentlich wollte ich nur 
http://sdcc.sourceforge.net/mediawiki/index.php/8051_variants ergänzen.

> Aktuelle 8051 z.B. EFM8 haben wieder nur
> ein DPTR da Zugriff aufs externe RAM ohnehin mit DMA gemacht wird.

SiLabs hatte auch schon beim älteren C8051 nur einen dptr, und es dann 
beim neuen EFM8 auch wieder so gemacht. Zilog dagegen ist ja erst vor 
wenigen Jahren mit dem Z8051 eingestiegen, mit 8 dptr.

Philipp

von Peter D. (peda)


Lesenswert?

Wobei die mehreren Datenpointer nicht wirklich was bringen, weil z.B. 
beim Kopieren ständig umgeschaltet werden muß.
Schneller geht das Kopieren daher mit DPTR als ein Pointer und P2/R0 als 
der andere.
Manche 8051 können diesen Trick auch auf dem internen XRAM, z.B. der 
C505 hat das XPAGE-Register als High-Adresse.

von Jobst M. (jobstens-de)


Lesenswert?

Der AD8051 / AD8052 ist ganz ohne dptr ...


:-)

Gruß

Jobst

von Philipp Klaus K. (pkk)


Lesenswert?

1
__xdata long int *i, *j;
2
3
void f(void)
4
{
5

6
  *i += *j;
7

8
}

Braucht bei nur einem dptr viele Register, die der Compiler 
möglicherweise für anderes gut gebrauchen könnte. Und von der Hardware 
her ist ein zweiter dptr billig.

Philipp

von Philipp Klaus K. (pkk)


Lesenswert?

Wobei es mit der Compilerunterstützung für mehrere dptr wohl bisher noch 
nicht so gut aussieht: Weder SDCC noch Keil können Code, der die 
zusätzlichen dptr nutzt generieren.

Philipp

von Lothar (Gast)


Lesenswert?

Philipp Klaus K. schrieb:
> Weder SDCC noch Keil können Code, der die
> zusätzlichen dptr nutzt generieren

Habe hier einen älteren LPC935 und Keil zeigt unter Options:

use multiple DPTR registers

Aber durch den Umstieg auf EFM8 spielt das ohnehin keine Rolle mehr

von Thomas (Gast)


Lesenswert?

Das ist zumindest für den Keil Compiler so nicht richtig. Die  C 
Bibliotheken benutzen auf Wunsch die multible DPTR. das ist seit V5 
eingebaut. Das geht allerdings nur im PK51.
Der Nutzen ist allerdings wie Peter schon gesagt hat zweifelhaft.
Thomas

von Philipp Klaus K. (pkk)


Lesenswert?

Lothar schrieb:
> Philipp Klaus K. schrieb:
>> Weder SDCC noch Keil können Code, der die
>> zusätzlichen dptr nutzt generieren
>
> Habe hier einen älteren LPC935 und Keil zeigt unter Options:
>
> use multiple DPTR registers
>
> Aber durch den Umstieg auf EFM8 spielt das ohnehin keine Rolle mehr

Aber das hat nur Einfluß auf die verwendeten Bibliotheken (also ein paar 
von Hand geschriebene Assemblerroutinen für memcpy(), memmove(), etc). 
Der aus C-Code generierte Assemblercode verwendet nur einen dptr.

Philipp

von Philipp Klaus K. (pkk)


Lesenswert?

Beim den Varianten mit 24-bit-Zeigern, DS390 und DS400 sieht es etwas 
besser aus: Zumindest SDCC erzeugt dort Code für die beiden dptr.

Philipp

von Philipp Klaus K. (pkk)


Lesenswert?

Soweit ich sehe, gibt es zur Zeit 3 weit verbreitete Ansätze für zwei 
dptr:

* 2 dptr, via DPS at 0x86.0, DPL1 at 0x84, DPH1 at 0x85 (erstmals beim 
AMD C521).
* 2 dptr, via DPS at 0xa2.0 (erstmals beim Philips P89C51R).
* 2 dptr, via EO at 0xd0 (erstmals beim Infineon XC866).

MDU/Cordic haben sich anscheinend nicht durchgesetzt. Während SiLabs bei 
einem dptr bleibt, verwenden anscheinend die meisten Hersteller von 
8051-kompatiblen µC nun zwei dptr, und wählen dabei einen der drei oben 
genannten Ansätze.

von Peter D. (peda)


Lesenswert?

Philipp Klaus K. schrieb:
> MDU/Cordic haben sich anscheinend nicht durchgesetzt.

Die Versuche, den 8051 auf 16 Bit zu pimpen, sind ja auch alle im Sande 
verlaufen (Intel 80C251, Philips 51MX).

https://www.nxp.com/docs/en/user-guide/UM_P89C669.pdf

https://www.keil.com/dd/docs/datashts/intel/8xc251sx_um.pdf

von Thomas Z. (usbman)


Lesenswert?

SDCC benutzt den DPTR zur Parameter Übergabe. Keil R0..R7. Das ist der 
Hauptgrund warum der Keil C Compiler die DPTR Register nicht anfasst. 
Dieser stehen somit komplett der Lib zur Verfügung. Der C-Compiler kennt 
aber die Verwendung des DPTR in den Libs. ($reguse)
Meiner Meinung nach der Hauptgrund warum der SDCC nie so efektiven Code 
wie der Keil erzeugen kann.

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
Noch kein Account? Hier anmelden.