Dynamische Speicherverwaltung

OP #3903855
Lesenswert?
• ▲
▼
Hallo,
ich arbeite mit einem ATmega644 und möchte gerne eine dynamische 
Speicherverealtung auf dem SRAM von 4Kb implementieren.
Die Frage jedoch ist, wie ich gezielt werde im Speicher schreiben kann?
Es soll einen Funktion geben, die auf eine gegebene Adresse einen 
bestimmten Wert schreiben soll.
Leider kann ich ja nicht einfach schreiben:
1
0x0012=4;
Außerdem möchte ich Werte an speziellen Adressen auslesen lassen.
Meine Idee bisher war, einen Pointer zu initialisieren, dem diese 
Adresse zu geben und dann einfach mit * zu dereferenzieren. Das scheint 
jedoch nicht zu funktionieren.
1
 //typedefs in der Header Datei:
2
//typedef uint16_t MemoryAdress
3
//typedef uint8_t MemoryVal
4

5
MemoryVal read (MemoryAdress addr) {
6
int *p;
7
p=addr;
8
return (*p);
9
}

Irgendwie stehe ich gerade auf dem Schlauch.
Bin über jeden Tipp und jede Hilfe dankbar.

Schönes Wochenende!
Gast #3904174
Lesenswert?
• ▲
▼
L. schrieb:
> Leider kann ich ja nicht einfach schreiben:
>0x0012=4;

Mit einem Cast geht es:
1
*((uint8_t*) 0x0012) = 4;

L. schrieb:
> Meine Idee bisher war, einen Pointer zu initialisieren, dem diese
> Adresse zu geben und dann einfach mit * zu dereferenzieren. Das scheint
> jedoch nicht zu funktionieren. //typedefs in der Header Datei:
> //typedef uint16_t MemoryAdress
> //typedef uint8_t MemoryVal
>
> MemoryVal read(MemoryAdress addr) {
> int *p;
> p=addr;
> return (*p);
> }

Auch da brauchst Du einen Cast, damit es ohne Warnung geht:
1
MemoryVal read(MemoryAdress addr) {
2
  MemoryVal* p;
3
  p = (MemoryVal*) addr;
4
  return *p;
5
}

Oder kürzer:
1
MemoryVal read(MemoryAdress addr) {
2
  return *((MemoryVal*) addr);
3
}

Allerdings würde ich Dir dringend davon abraten, direkt mit den 
physischen Addressen zu hantieren. Leg Dir lieber ein großes Array an, 
aus dem Du Speicher vergibst:
1
MemoryVal dynamicMemoryBuffer[4096];
2

3
MemoryVal read(MemoryAdress addr) {
4
  return dynamicMemoryBuffer[addr];
5
}

Oder nimm gleich malloc, dann kannst Du Dir die Arbeit sparen ...
Gast #3904184
Lesenswert?
• ▲
▼
L. schrieb:
> ich arbeite mit einem ATmega644 und möchte gerne eine dynamische
> Speicherverealtung auf dem SRAM von 4Kb implementieren.

Und welche Vorteile versprichst du dir gegenüber einer statischen 
Speicherplatzvergabe. Bei 4kB stehen die Chancen eher schlecht, dass du 
spontan vom Betriebssystem größere Speicherblöcke anfordern kannst. 
Entweder dein Kram paßt in die 4kB rein, oder nicht.

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.