Im Manual kam bei mir folgendes Problem auf zudem ich nichts finden
konnte, ich schreibe in meinem Mikrocontroller Programme die
Berechnungen machen und muss deswegen verschiedene Werte ständig
abspeicheren und auslesen wozu ein RAM ja gedacht ist.
Nur habe ich hier ja jetzt bloß den Data-Memory in dem die Register
liegen sowie den Flashspeicher und seinen EEprom oder so ähnlich in dem
PIC18F. Jedenfalls sehe ich hier nicht wo ich Werte Speichern soll die
sich andauernd ändern, man könnte vielleicht das ein oder andere
Register zweckentfremden und dort seine Werte speichern die erforderlich
sind aber die anderen Speicher gehen ja bei dem andauernden Beschreiben
kaputt.
Wäre gut wenn mir jemand sagen könnte wo ich denn hier jetzt weiter
suchen/lesen soll zur speicherung von Arbeitsdaten die dauernd abgerufen
werden müssen.
Ich denke mal das Deine Fragestellung ungenau/unvollständig... ist!
Kphos schrieb:> und muss deswegen verschiedene Werte ständig> abspeicheren und auslesen wozu ein RAM ja gedacht ist.Kphos schrieb:> Jedenfalls sehe ich hier nicht wo ich Werte Speichern soll die> sich andauernd ändern,...> und dort seine Werte speichern die erforderlich> sind aber die anderen Speicher gehen ja bei dem andauernden Beschreiben> kaputt.
???
Ernsthaft, konntet ihr den Text nicht verstehen? Ich kann das kaum
glauben, vielleicht bin ich ja in den letzten Jahren zu eigenbrötlerisch
geworden und die Leuten verstehen meine Texte nicht mehr jedoch denke
ich es ist sehr deutlich formuliert wo hier die Probleme liegen.
Ich habe eine hohe Zahl von Variablen(!) die mit einer hohen
Aktualiserungsrate regelmäßig gespeichert werden sollen, dazu ist RAM
normal gedacht nur kann ich soetwas wie RAM in einem normalen x86 auf
meinen PIC18F nicht finden.
Also wie soll ich die jetzt speichern ohne mir den Flash kaputt zu
machen? Das blöde PIC18F-Ding scheint keinen Arbeitsspeicher zu haben
und ich suche irgendwelche Möglichkeiten wie man es löst. Ihr wollt mir
doch nicht erzählen das ich auf dem PIC18F bloß die wenigen Register
habe und dann nur solchen Festpeicher wie Flash?! Wozu habe ich dann
denn diesen riesigen Program-Memory um riesige Programme zu schreiben
wenn ich keinen Arbeitsspeicher habe um irgendwelche wichtigen Variablen
abzulegen/zwischenzuspeichern? Würde ja bedeuten es müssen jedesmal an
dem Mikrocontroller zusätzliche Rambausteine angeschlossen werden um die
Aufgaben zu erledigen.
Kphos schrieb:> Nur habe ich hier ja jetzt bloß den Data-Memory in dem die Register> liegen
Jain.
Bei den "Register" unterscheidet man "special function register" (also
TMR0, STATUS, INTCON etc etc) und "file register" (dorthin kommen deine
Variablen).
Beide liegen in einem zusämmenhängenden Speicher und der ist als RAM
aufgebaut.
Wo nachlesen: Im Datenblatt deines Kontrollers, dort ist alles
ausreichendst erklärt
Troll... Die Englische Übersetzung für Manual ist Datenblatt. Les dir
mal in ruhe meine Texte durch bevor du hier solche ironischen Sachen
postest.
Der Data-Memory in einem PIC ist sein Arbeitsspeicher, der wird
Allgemein als Fire Register bezeichnet und der ist nur in GPR sowie SFR
unterteilt. Da davon jedes Register eine ihm zugewiesene Funktion hat
kann ich sie höchstens wie im ersten Beitrag geschrieben zweckentfremden
nur ist das in meinen Augen nicht effektiv.
Es gibt den Program Memory Space und den Data Memory Space, der Program
Memory Space ist Flash sowie EEProm und Data Memory Space soetwas
ähnliches wie RAM also die File Register in denen die GPR sowie SFR
liegen.
Laut Manual(Datenblatt) gibt es nur die Speicher und ich denke mir das
es scheiße ist einen so riesen Flash ohne irgendwelchen richtigen
Arbeitsspeicher zu haben. Die Möglichkeiten des Data Memory sind nur
begrenzt also gehe ich mit dem Problem in ein Forum weil in dem Manual
nichts steht wo ich noch Daten Speichern soll wo mir der Speicher nicht
durch dauerndes beschreibne kaputt geht. Im Prinzip habe ich die Antwort
schon längst nur denke ich es könnte vielleicht noch irgendwas geben wo
ich meine Daten intern speichern könnte ohne externe Hilfsmittel wie
einen zusätzlichen Speicherbaustein.
Ist ja ein super Userfreundliches Klima hier...
Das Troll galt dem Vorposter von bestucki, deinen Post habe ich nicht
gesehen.
Richtig, die Manuals bzw. Mikrocontroller sind sich im allgemeinen sehr
ähnlich. Logisch, erfindet ja nicht jeder eine komplett neue
Computerarchitektur für seinen Chip.
Das Manual das ich lese ist PIC 18F4550 sowie ich die Controller dazu
habe, sah es nur nicht als notwendig das zu Posten weil es doch im
Prinzip alles das gleiche ist. Also wie ich dem Manual richtig entnehme
gibt es außer dem anschließen eines externen Speicherbausteins keine
weiteren Möglichkeiten hohe Kapazitäten von verschiedenen sich ändernden
Variablen in hoher Wiederholungsrate schadenfrei abzuspeichern...
Kphos schrieb:> Also wie ich dem Manual richtig entnehme> gibt es außer dem anschließen eines externen Speicherbausteins keine> weiteren Möglichkeiten hohe Kapazitäten von verschiedenen sich ändernden> Variablen in hoher Wiederholungsrate schadenfrei abzuspeichern...
Dein PIC hat 2k SRAM. Wenn das nicht genügt, nimmst du einen dickeren
Controller oder spendierst externes RAM. Oder du Programmierst
sparsamer.
Den GPR ist überhaupt keine Funktion zugewiesen oder irgendwie
eingeschränkt (abgesehen von den Controllern welche DMA etc haben, da
sind bestimmte Bereiche für DMA priorisiert).
Wenn du "Unmengen" RAM benötigst musst du PIC32 nehmen - da gibts bis
256kB SRAM (oder mittlerweile mehr!).
Seite 68 im Manual des PIC 18F4550, das unused habe ich nicht gesehen
weil ich mich nur auf den Text und weniger auf die Bilder konzentriert
habe. Das heißt dann wohl hier liegen neben den SFR sowie GPR-Registern
noch komplett freie Speicherbänke... Bitte Posten ob ich es richtig
verstehe aber ich denke schon
Nein, habe es doch richtig gelesen. Die PIC 18F4550 haben 8 Bänke,
dementsprechend sind die anderen "Unused", also nicht existent. Dann
muss ich wohl sehen das ich in die Register sauber rein schreibe ohne
Konflikte auszulösen und ggf. einen externen Speicher verwenden.
Das mit den PICs und dem RAM ist ein Problem seitdem ich die Dinger in
der Hand habe. Du kannst eigentlich schon ein Datenfeld bis 256 Byte RAM
anlegen, danach wird's aber komisch weil du im Linker Script die Bänke
zusammenhängend deklarieren mußt.
Hast du den MPLAB® C18 C COMPILER USER’S GUIDE schon durchgeblättert?
In 5.2 APPLICATION: CREATING LARGE DATA OBJECTS AND THE USART
steht wie du den Speicher handhaben mußt.
Ich programmiere komplett in ASM, dort ist das mit dem Speicher
ansprechen so oder so etwas anders. Da habe ich sogenannte Bank Select
Register auf die die ich vor dem schreiben achten muss nicht das ich in
die falsche Bank schreibe.
Kphos schrieb:> Das heißt dann wohl hier liegen neben den SFR sowie GPR-Registern
Seite 69:
> PIC18 devices may have banked memory in the GPR area. This is> data RAM which is available for use by all instructions.
Also: General Purpose Register ist ein anderes Wort für RAM
Kphos schrieb:> Da habe ich sogenannte Bank Select Register auf die die ich vor dem> schreiben achten muss nicht das ich in die falsche Bank schreibe.
Darum kümmere ich mich nicht, dafür habe ich Personal. Ein C-Compiler
kann so etwas richtig gut, wird nie krank und macht keinen Urlaub. Man
kann ihn ohne Arbeitgericht einfach kündigen und was jüngeres
einstellen.
MfG Klaus
lol!
Danke, jetzt sehe ich es auch. Scheint im GPR Bereiche zu geben die man
frei verwendet.
Man kann sich auch solche Linker relativ einfach zu seinem ASM-Code
programmieren die einem das meiste Abnehmen.
Kphos schrieb:> Ich programmiere komplett in ASM, dort ist das mit dem Speicher> ansprechen so oder so etwas anders. Da habe ich sogenannte Bank Select> Register auf die die ich vor dem schreiben achten muss nicht das ich in> die falsche Bank schreibe.
Du solltest auf C compiler umsteigen, dann brauchst du dich um "Bank
Select" nicht mehr zu kümmern.
Der Compiler sagt dir dann schon, ob das Ram für dein Programm
ausreicht.
Frage: Dir ist aber schon klar, daß RAM verloren geht wenn man die
Spannung abschaltet?
Gruss