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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren