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 ...