Forum: Mikrocontroller und Digitale Elektronik Bankswitching für Datenspeicher(xdata)


von TOM (Gast)


Lesenswert?

@all,

leider konnte ich keinen passenden Beitrag finden und werde nun einen
selber schreiben.
Ich habe ein Programm geschrieben das sehr viel Daten speichern muss.
Um nun den Bereich zu erweitern zu können, kann ich zwischen 2 Bänken
umschalten das funktioniert auch.
Nun ist aber mein Problem, wie kann ich der Keil Software beibringen,
dass nicht nur 64K existieren sondern 128k.
Habe schon alles ausprobiert jedoch ohne Erfolg.
Hat eventuell schon jemand Erfahrung bzw. hat es schon jemand gemacht
und kann mir ein paar Tipps geben.
Mein HW  80C517A(Lab 537) und Keil µvision2.

Danke TOM

von Peter D. (peda)


Lesenswert?

Hast Du schon mal auf der Keil Webseite gesucht ?

Steht denn in der Doku zum Board nichts dazu drin ?

Unterstützt Deine Keil-Version überhaupt Speicher-Banking ?


Wenn Du einen Datenlogger baust, ist es oft günstiger einen EEPROM oder
Flash zu nehmen, dann bleiben die Daten auch beim Abschalten erhalten.
Dann braucht man sich nur eine Funktion zu schreiben, die einen
Datenblock aus einem SRAM-Bereich in den Flash/EEPROM kopiert. Im
Prinzip so, wie man z.B. einen UART-Puffer programmiert.


Müssen aber die 128kB wirklich ständig wahllos zugegriffen werden, dann
muß man irgendwo dem Compiler eine Funktion angeben, die die
Adreßumschaltung durchführt. Natürlich werden damit sämtliche
Datenzugriffe über diese Funktion umgeleitet und damit arschlahm.

Es liegt also in Deinem Ermessen, ob Du wirklich arschlahme 128kB flat
SRAM haben willst oder nur einige Datenblöcke ab und zu auslagerst.


Peter

von Peter D. (peda)


Lesenswert?

P.S.:
Man muß den Compiler auf das Huge memory model einstellen.


Peter

von TOM (Gast)


Angehängte Dateien:

Lesenswert?

@Peter,

"Hast Du schon mal auf der Keil Webseite gesucht ?"

Ja,habe jedoch leider nichts passendes gefunden.
Das einzige was ich gefunden habe ist hier
http://www.keil.com/support/docs/2103.htm .
Eigentlich sollte doch der Software einfach mitgeteilt werden, dass
mehr Speicher verfügbar ist das umschalten will ich selbst
programmieren.

"Steht denn in der Doku zum Board nichts dazu drin ?"
Da steht nur drin wie die Umschaltung funktioniert und das funktioniert
auch. Nur kann ich der Keil Software nicht mitteilen Dass mehr als 64K
zu Verfügung stehen.

"Unterstützt Deine Keil-Version überhaupt Speicher-Banking ?"

Für den Codebereich gibt es ein Häckchen(Anhang).
Für den Datenspeicher müsste dies auch existieren?!?

Bin um Hilfe dankbar.

Tom

von Peter D. (peda)


Lesenswert?

Ich hab mich noch nie dafür interessiert, da 64kB Code + 64kB Data immer
dicke ausreichten und ich also immer das small memory model nutzen
konnte.


Dein Link ist doch goldrichtig und enthält alles nötige.

Wenn Du also nicht das Profikit PK51 hast, dann ists Essig mit far
Variablen.

Keil ist also doch nicht so doof, wie ich dachte.
Du must nur die erweiterten Variablen als far deklarieren, alle anderen
werden entsprechend dem Memory model weiterhin gleich schnell
zugegriffen.


Peter

von TOM (Gast)


Lesenswert?

@Peter,

sorry aber ich versteh nur Bahnhof?!?!?!?!?!?!?
Programmiere zwar schon einige Monate und habe auch so einiges
hinbekommen doch da blicke ich nicht durch.
Was macht dieses XBANKING.A51 eigentlich.

Wäre nett wenn Du es mir mal erklären könntest da ich in Assembler
nicht so bewandert bin(leider).

Gruß

TOM

von Peter D. (peda)


Lesenswert?

"Wäre nett wenn Du es mir mal erklären könntest da ich in Assembler
nicht so bewandert bin(leider)."

Daran führt kein Weg vorbei, wenn Du es haben willst.

Ich vermute mal, daß Du da die Assemblerbefehle eintragen mußt, mit
denen die Umschaltung erfolgt.


Erzähl dochmal, warum Du soviel Speicher brauchst.


Du weißt aber schon, daß man viel mehr lokale Variablen haben kann, als
physisch an SRAM vorhanden ist ?

Ich hab z.B. in einem Projekt etwa 1000Byte Variablen gehabt, die
trotzdem  alle in die 256Byte internen SRAM paßten.


Peter

von Peter D. (peda)


Lesenswert?

P.S.:

Du weißt hoffentlich auch, daß nicht alle Variablen immer nur double
float sein müssen, sondern auch unsigned char sein dürfen, wenns
ausreicht.

Eine sehr sehr gute Hilfe für effiziente Programmierung ist der
C51-Primer.


Peter

von TOM (Gast)


Lesenswert?

@Peter,

ich werte Sensoren aus d.h. aktuelle Daten und alle 15min einen
Mittelwert.
Also 12 Sensoren x 4 Werte = 48 Datensätze
Jeder datensatz besteht aus 4-6 integer Werten
Also 48 x 5 = 240 integerwerte pro Std x 24Std = 5760 Werte pro Tag.
Das sind so 11k pro Tag.
Mein Speicher 64K reicht also so 6 Tage, da ich aber ein 128K SRAM auf
meinem Board habe wollte ich diese auch nutzen.
Das ist der ganze Gedanke.Eigentlich habe ich gedacht das geht etwas
einfacher.

TOM

von TOM (Gast)


Lesenswert?

@all,

ich habe mich nun ein wenig durchgearbeitet und habe herausgefunden das
man das irgentwie einstellen kann mit XBANKING.A51 oder
L51_Bank.A51(link oben).
Im OPTION OF TARGET kann ich unter dem Reiter Device 2 Hacken setzen
dann wird 'far' memory support schwarz und ich kann es verwenden.
Soweit so gut, es gibt auch unter C51\Samples\ einige Beispiele wie
das gemacht wird.Hat eventuell jemand damit schon experimentiert oder
kann mir sagen welches beim 80C517A passt.
Gruß und Danke!!!!!!
TOM

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.