Erste 8051-Derivate mit mehreren dptr

OP #4630746
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
OP #4631066
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
#4631297
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.
Gast #4632038
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
OP #4632058
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
OP #7469038
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.

#7470173
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.

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.