Forum: Mikrocontroller und Digitale Elektronik M16C NC30 user RAM


von Fred Strobel (Gast)


Lesenswert?

Hallo,
der M16C/62 hat einen RAM-Bereich für den User von 18.6KB.
Wenn ich es richtig verstanden habe, werden dort die Variablen, die ich
in meinem C-Programm deklariert habe abgelegt.
Nun habe ich folgendes Problem:
Ich habe ein Arrays angelegt: long var1[8][3000] und ein paar wenige
Gebrauchsvariablen (char, double, etc.)
Ein long hat 2Byte Speicherbedarf, demzufolge habe ich einen Verbrauch
von 8*3000*2 = 48000Byte = etwa 48KB.
Nun gibt es aber im Speicher doch einige Bereiche, die ich noch meine
Nutzen zu können. Bsp hinter meinem Program Code, der 65KB verschlingt,
aber insgesamt 240 KB groß sein darf.
Wie kann ich mir hier behelfen?

von Peter Kasi (Gast)


Lesenswert?

Hallo Fred,
ist dir der Unterschied zwischen RAM und ROM eigentlich klar?
Willst du auf die Arrays nur lesend zugreifen, oder auch schreiben?
Ich will dir hier nicht vor den Kopf stoßen, aber schnapp dir einfach
nochmal die Datenblätter und versuche dir mal klar zu werden wie dein
µC aufgebaut ist und was es mit den verschiedenen Speicherarten auf
sich hat, bzw. wie so ein Programm aufgebaut ist. Ich denke das
C-Manual zu deinem Compiler dürfte dir auch etwas weiter helfen.
Um es mal auf den Punkt zu bringen, wenn du den Rest den dein Programm
nicht belegt verwenden willst, kannst du es nur Read-Only machen (s.a.
const - operator).
PS: ein long hat 32Bit sprich 4Byte

Gruß
Peter

von thkaiser (Gast)


Lesenswert?

Du hast entweder Deine Software falsch ausgelegt (wozu braucht man ein
so großes Array??) oder den falschen Controller.
Ich bin jetzt nicht ganz sicher, aber ich meine, man kann an die
M16-Reihe externen RAM anschließen. Ist dann aber die Frage, ob der
Compiler damit zurechtkommt.
Mein letztes System mit "viel" Speicher war ein 68000 mit 1 MB RAM -
und hieß Atari ST ;)

von Matthias (Gast)


Lesenswert?

Hi

Also 48k sind ja nun mal wirklich nicht viel Speicher. In einer meiner
letzten AVR Anwendungen (Mehrkanal-Datenlogger mit grafischer Ausgabe)
hab ich fast die gesammten 64k Adressraum eines ATMega8515 ausgenutzt.

Matthias

von thkais (Gast)


Lesenswert?

48K sind dann viel Speicher, wenn man ihn nicht hat.

von Matthias (Gast)


Lesenswert?

Hi

du schreibst aber:
Du hast entweder Deine Software falsch ausgelegt (wozu braucht man ein
so großes Array??) oder den falschen Controller.

Ein so großes Array kann man durchaus gebrauchen. Und den flaschen
Controller hat er mit dem M16C auch nicht. Da kann man problemlos 512k
externes SRAM anflanschen.

Matthias

von Fred Strobel (Gast)


Angehängte Dateien:

Lesenswert?

Zunächst mal vielen Dank und ein frohes neues Jahr, (in dem es an
Hilfbereitschaft offensichtlich nicht fehlt :-) )

@Peter: bei Rom und Ram hab ich wirklich auf dem Schlauch gestanden.
Den Rom - Bereich kann ich natürlich nicht für Variablen nutzen. Ich
hab eine Übersicht über den Speicherbereich, die ich als Datei hier
anhänge. Anstatt eines Datentyp long meinte ich eigentlich den short
int, denn ich muss 10-bit Werte ablegen. Da reichen ja 2 Byte.

@thkaiser: das Array brauche ich tatsächlich, da ich 8 analoge
Messwerte jede Sekunde über eine 50 Minuten (= 3000 s)aufnehmen muss.

@Matthias: Für den M16C/62 habe ich zwei Boards von Glyn, die
Etagenartig aufeinander gesetzt werden können. Auf dem ersten sitzt der
Controler, auf dem zweiten ist ein Modul zur Adaptierung einer
CompactFlash-Card angebracht. Allerdings muss ich den Speicher dieser
Card über ein bestimmtes Prozedere ein- bzw. auslesen, welches ich
bisher nicht beherrsche. Die CF-Card benutzt den Daten und Adressbus.
Kann ich dann noch ein externes SRAM anflanschen? Wenn ja, wie soll ich
weiter vorgehen?

von thkaiser (Gast)


Lesenswert?

Im Datenblatt des M16C ist das Interface für den externen RAM
beschrieben.
@Matthias: Ich stelle immer wieder fest, daß Umsteiger von PC auf
Controller Schwierigkeiten mit dem Speicher haben. Dies liegt daran,
daß auf dem PC durch die permanente Speicherverschwendung von Windows
die Größe des Speichers extrem überhöht wurde. Deshalb finde ich
(persönlich) es nicht gut, einfach mal Speicher dranzupappen, wenn man
nicht weiter weiß. Genau das hat Microsoft in Zusammenarbeit mit den
PC-Herstellern auch gemacht, und ich wundere mich, wozu ein PC 512MB
(oder mehr) Hauptspeicher braucht - wobei dann immer noch eine
Auslagerungsdatei von der gleichen Größe erzeugt wird, und die Kiste
immer noch auf der Platte rumrödelt.
Es besteht auch die Möglichkeit, die Daten zu komprimieren. Es muß ja
nicht gleich ein ZIP-Algorithmus sein, aber gerade bei analogen
Eingängen tut sich oftmals nicht sehr viel, da kann man einiges
herausholen. Ist natürlich abhängig davon, was später mit den Daten
geschehen soll, aber der M16C macht so etwas mit links nebenbei.
Darauf bezog sich meine Aussage "Software falsch ausgelegt". Und
falscher Controller bezog sich darauf, daß ich 1. Nicht genau wußte, ob
man externen RAM ranhängen kann (ist nicht immer selbstverständlich)
und 2. man im Vorfeld schon mal schauen sollte, ob der Controller für
die Anwendung paßt. In diesem Fall war ja recht schnell klar, daß der
Speicher nicht reicht - und im Sinne von "so wenig Aufwand wie
möglich" hätte ich mir einen Controller herausgesucht, der den
Speicher möglichst intern bereitstellt. Wenn man erst mit viel Aufwand
einen Adress- und Datenbus zusammenbasteln muß, kann man sich gleich
ein System wie die KatCe zusammenbauen.

von Matthias (Gast)


Lesenswert?

Hi

wenn die Daten auf die CF sollen ist es nicht nötig alle Daten
zwischenzuspeichern. Einfach einen Sektor (oder einen Cluster des
Dateisystems) immer im Speicher halten und sobald der voll ist
wegschreiben. Zur Ansteuerung der CF gibt es von Mitsubishi AFAIK eine
Aplication Note. Und genau danach hat Glyn auch die Hardware erstellt.

@thkeiser
Ich würde nicht immer danach gehen alles mit einem Controller ohne
externe Hardware erschlagen zu wollen.
Bei Fred ist Kompression sicher interessant (kommt natürlich auf die
Daten an die er ermittelt). Aber nur wegen dem RAM einen Controller zu
wählen wäre dann doch etwas übertrieben. Meine Anwendung die ich oben
erwähnt habe war mit einem 8515 locker zu erschlagen hat allerdings 64k
Speicher gebraucht. Wenn ich jetzt also keinen externen Speicher haben
wollte hätte ich einen Chip gebraucht der 64k intern hat. Mal davon
abgesehen das mir so auf Anhieb keiner einfällt der das bietet (bei den
AVR's schon gleich garnicht) sind das dann meistens Klopper vom Format
eines M16C/62 mit 80+ Pins und 10€+ pro Stück. Unnötig an dieser
Stelle. Also externer Speicher. Wenn es natürlich darum geht 8515 +
externer Speicher oder Mega16 fällt die Wahl natürlich auf den Mega16
selbst wenn der etwas teurer ist.

Matthias

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.